You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/08/26 00:19:23 UTC
(superset) branch tdd/issue-36304-meta-db-limit-drops-join-matches updated (9a833def983 -> 0514743034b)
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch tdd/issue-36304-meta-db-limit-drops-join-matches
in repository https://gitbox.apache.org/repos/asf/superset.git
from 9a833def983 test(sql): close 100% coverage gap in _count_weighted_table_references
add c8305b0ba98 feat(ci): publish Python unit test results as PR check annotations (#42503)
add fbeba10f750 fix(sqllab): make MenuDotsDropdown trigger focusable for tab rename (#43015)
add d5ae93c9b8d test(echarts): pin Bar chart X Axis Title flows through untouched (#42560) (#42599)
add 25c2ca11276 ci: run pre-commit checks via prek (#42500)
add b8ca729f9fc fix(sql): only force a LIMIT onto query expressions (#43097)
add d0658bacc89 fix(mcp): give concurrent tool calls isolated db sessions (#42629)
add ec136f6d8df fix(charts): decode CSV bytes payload before feeding pandas StringIO (#32370) (#42735)
add c8cb09d4589 fix(dev): stop the webpack dev-proxy from hanging on a mid-stream backend disconnect (#42811)
add e1468a709c0 fix(sunburst): keep SQL null and literal string "null" as distinct groups (#43013)
add 117b92a517a fix(mcp): expose table column formatting (#42658)
add 5b281585194 fix(helm): stop shipping conflicting podDisruptionBudget defaults (#42995)
add 6211f9936b3 feat(mobile): Add mobile-friendly dashboard consumption mode (#37141)
add 67bbe0ac173 ci: speed up backend CI with astral-sh/setup-uv and apt package caching (#42498)
add dc9547554b4 fix(echarts): normalize BigInt metric values before summing/dividing in stacked charts (#36401) (#42594)
add f7a2f0ec501 feat(table): allow choosing Sum or Average for the "Show summary" totals row (#43027)
add 3c7633f935f fix(encrypt): stop naive padding from truncating secrets ending in '*' (#43074)
add 01d0772d4f3 fix(box-plot): distribute across field not marked as required for datasets without a temporal column (#43087)
add a63483b9b1a fix(sql): rebase Dremio dialect on sqlglot's native dialect (#43099)
add 3fb58900b9a chore(duckdb): remove cursor.description workaround, no longer reproducible (#43101)
add 930ba64fdf3 fix(ci): format ErrorMessage tests (#43114)
add 8f78f9eb9c7 chore: update CODEOWNERS for extension and config files (#43142)
add 537f0fd2dbe fix(sqllab): use dialect-specific quote chars for autocomplete identifiers (#41492)
add a188e9473ab feat(chart): let Drill By scope to the clicked x-axis value (#42296)
add bacaf08a22f docs(perf): add Dashboard Performance guide covering virtualization, lazy tabs, and chart-count guidance (#40238)
add aec567f7d6c chore(deps): bump antd from 6.5.3 to 6.5.4 in /superset-frontend (#43162)
add a6db0d1cde2 chore(deps): bump query-string from 9.4.1 to 9.5.0 in /superset-frontend (#43161)
add 9bc3173e3a3 chore(deps): bump antd from 6.5.3 to 6.5.4 in /docs (#43160)
add 8523ea4d0a9 chore(deps): bump caniuse-lite from 1.0.30001806 to 1.0.30001807 in /docs (#43159)
add acf39e3ef0c chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /superset-frontend (#43158)
add 3b99e092d08 chore(deps-dev): bump tsx from 4.23.9 to 4.23.10 in /superset-frontend (#43157)
add 9c5bde94918 chore(deps): bump mapbox-gl from 3.28.0 to 3.28.1 in /superset-frontend (#43156)
add 7c0c5283c3f chore(deps-dev): bump the storybook group in /superset-frontend with 5 updates (#43155)
add a4c47359e61 chore(deps): bump the storybook group in /docs with 2 updates (#43154)
add 84c371d56e1 chore: fix stale developer_portal paths (#43143)
add 92728169de9 docs: document the zstd prerequisite for the frontend dev server (#43109)
add c395b9a2383 fix(examples): migrate Life Expectancy VS Rural % example off the removed legacy bubble viz_type (#43152)
add 856599027a8 fix(mcp): harden the embedded-guest chart data-read path
add 1e65d93a836 fix(sql): handle ORDER BY in embedded MSSQL queries (#43127)
add b62ec512d2c fix(explore): hide edit-properties menu item for non-owner/non-editor users (#38884) (#42737)
add c068a8c09cf fix(dashboard): preserve certification fields when Certification panel is closed (#42957)
add dd1afb029fd fix(ci): stop py311/py312 docker builds from silently matching lean (#42509)
add 0a7ebe1dd18 fix(ci): stop superseded Docs Deployment runs from showing as cancelled (#42488)
add e808fcbcada fix(mcp): bind all generated charts to dashboard time filters (#42490)
add edfb009e1c4 fix(mcp): expose query context to Jinja macros (#42822)
add 81e431cd501 fix(mcp): return all chart query results (#42824)
add 8967e6c2d33 fix(mcp): accept changed_on_delta_humanized as order_column in list tools (#42571)
add f4587218dd1 fix(mcp): populate user_id in MCP audit logs (#42767)
add 2eedc609a80 fix(sql_lab): return 400 not 500 when raise_for_access hits malformed Jinja in results.py (#43145)
add 738d12677a9 fix(i18n-es): correct stranded translations in API key and semantic layer catalogs (#43080)
add a3bc2d908c4 ci(frontend): track bundle size over time with benchmark-action (#42511)
add ca94026e977 fix(sqllab): async queries no longer stuck at Running forever (#42896)
add 21ae918656c fix(mcp): validate chart queries before persistence (#43128)
add e7139a7ac2d fix(models): enforce one OAuth2 token per user+database (#42897)
add 4684851336b fix(import): isolate per-tag import in a SAVEPOINT to avoid poisoned session (#42912) (#42920)
add 69c4011a95a feat(embedded): Add setDataMask API method (#35754)
add f7c70568c3f fix(charts): fix Bubble chart crash and correct example's time_range to a year with real data (#43201)
add 7679c5641ab fix(lint-metrics): record oxlint plugin rules under their canonical id (#43198)
add 93cc5204820 chore(deps): bump @googleapis/sheets from 13.0.2 to 14.0.0 in /superset-frontend (#43047)
add 22dde07a8e2 chore(deps): bump mako from 1.3.12 to 1.4.1 (#43207)
add cece082eed0 chore(deps-dev): update pyocient requirement from <4,>=1.0.15 to >=3.9.0,<4 (#43211)
add 2e8a8031f88 chore(deps): bump cachetools from 7.1.6 to 7.1.7 (#43208)
add 065342f8c91 chore(deps-dev): bump pandas-gbq from 0.35.0 to 0.35.1 (#43212)
add ad3103fdb0b chore(deps-dev): bump fastmcp from 3.4.5 to 3.4.7 (#43210)
add 94459ae8859 ci: declare top-level permissions on the remaining workflows (#43197)
add 2773bc94eb4 chore(deps-dev): bump sqlalchemy-bigquery from 1.17.1 to 1.17.2 (#43209)
add a2c004266b7 fix(ci): update vulnerable transitive nanoid (#43166)
add 70d06e3d777 docs(faq): convert flask fab freeze question to a proper heading (#43221)
add d114eb638b7 fix(datasets): preserve metric warning_markdown when extra is absent (#42763)
add a8216e3787a fix(calendar): localize date labels (#43163)
add cfd40bdd0d1 fix(dashboard): derive filter scope on read instead of serving a stale cache (#43252)
add 1991e3f0d2b fix(datasets): keep metric certified_by when certification details are typed next (#43255)
add aaf9eba1611 fix(db_engine_specs): skip malformed third-party dialect entry points (#43110)
add cdeca0c1798 chore(deps-dev): bump tsx from 4.23.10 to 4.23.12 in /superset-frontend (#43250)
add 98276cd1f35 chore(deps-dev): bump baseline-browser-mapping from 2.11.12 to 2.11.13 in /superset-frontend (#43249)
add 70ba9c9552d chore(deps-dev): bump eslint from 10.8.0 to 10.8.1 in /superset-frontend (#43248)
add b3a9b9beb49 chore(deps-dev): bump @types/node from 26.1.2 to 26.2.0 in /superset-frontend (#43247)
add afde126d9a7 chore(deps-dev): bump @testing-library/jest-dom from 7.0.0 to 7.0.1 in /superset-frontend (#43246)
add d917071708f chore(deps): bump caniuse-lite from 1.0.30001807 to 1.0.30001809 in /docs (#43244)
add 5105899810b chore(deps-dev): bump eslint from 10.8.0 to 10.8.1 in /superset-websocket (#43242)
add 3ed97f9691e chore(deps): bump ws from 8.21.2 to 8.21.3 in /superset-websocket (#43241)
add 97eafd61400 chore(deps-dev): bump @types/node from 26.1.2 to 26.2.0 in /superset-websocket (#43240)
add 6e270df4a24 fix(sql-lab): catch TemplateError in StreamingSqlResultExportCommand.validate (#43226)
add 2f8875aaef7 feat(semantic layers): optional metadata for metrics/dimensions (#43269)
add c9c230142bb chore(deps): bump baseline-browser-mapping from 2.11.12 to 2.11.13 in /docs (#43243)
add 2807f1b0e81 fix(dashboard): report the real error when saving a dashboard fails (#43140)
add e2070d79dc1 fix(reports): wait for ECharts paint before capturing report screenshots (#43077)
add 98136d547cc fix(reports): fail closed on alert screenshot capture instead of delivering a blank (#43031)
add 13eb47a1dab fix(api): improved request handling and embedded dashboard scoping (#42930)
add ed20e729d01 chore(deps): bump google-auth-library from 11.0.0 to 11.0.1 in /superset-frontend (#43292)
add f766de6d0db chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /superset-frontend (#43291)
add 49374f1fe5c chore(deps): bump antd from 6.5.4 to 6.6.0 in /docs (#43289)
add b4d79462ecd chore(deps-dev): bump oxlint from 1.77.0 to 1.78.0 in /superset-frontend (#43288)
add bdafb6c3305 chore(deps-dev): bump oxfmt from 0.62.0 to 0.63.0 in /docs (#43287)
add 5105f13726a chore(deps-dev): bump the typescript-eslint group in /docs with 3 updates (#43286)
add 72458ab26f1 chore(deps-dev): bump @typescript-eslint/eslint-plugin from 8.66.0 to 8.67.0 in /superset-frontend in the typescript-eslint group (#43285)
add 8ef7be57881 chore(deps-dev): bump oxfmt from 0.62.0 to 0.63.0 in /superset-websocket (#43283)
add d12320239a0 chore(deps-dev): bump typescript-eslint from 8.66.0 to 8.67.0 in /superset-websocket (#43282)
add 936f073b9ae chore(deps-dev): bump @typescript-eslint/parser from 8.66.0 to 8.67.0 in /superset-websocket (#43281)
add ebab31adc20 chore(deps): bump antd from 6.5.4 to 6.6.0 in /superset-frontend (#43294)
add 3c90bdc6f04 chore(deps-dev): bump oxfmt from 0.62.0 to 0.63.0 in /superset-frontend (#43293)
add 2d1daac11aa fix(explore): samples endpoint now honors requested row limit (#43148)
add 60e1802c523 fix(dashboard): mute the Group By display control loading spinner (#42879)
add fd063d17bfc fix(security): harden account password-change and session-invalidation handling (#42934)
add 086b4af65d4 feat(mcp): per-resource token scopes with user-permission intersection (#42297)
add f9946020967 fix(dashboard): align list OpenAPI schema (#43256)
add a13a5f1af4b chore(deps-dev): bump @typescript-eslint/eslint-plugin from 8.65.0 to 8.67.0 in /superset-websocket (#43284)
add e4ea6e23d8e chore(deps): bump supercluster from 8.0.1 to 9.0.0 in /superset-frontend (#43290)
add 7d4f30574fb feat(tooltip): add Truncate labels control to timeseries charts (#43272)
add c0ab5f3385c fix(dashboard): preserve native filter keys for dataset-less filters on save (#42898)
add 34cd50cc484 test(chart): mock the event log endpoint in the drill-to-detail menu test (#43183)
add 5ce52e531dc fix(clickhouse): add PT1S time grain (#43217)
add 097c99b19cb fix: remove a labeler glob that matches no files (#43270)
add fde0ba26d1b fix(mcp): validate virtual dataset metadata and surface errors (#43129)
add 15699150960 feat(multi-value): array-typed column filters with two-tier operators (ClickHouse MVP) (#41279)
add c07f3ebf2d4 chore(deps-dev): bump @swc/plugin-emotion from 14.15.0 to 14.19.0 in /superset-frontend (#43328)
add 334e280489a chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /superset-frontend (#43326)
add 1339bcd9dae chore(deps): bump swagger-ui-react from 5.32.12 to 5.32.13 in /docs (#43325)
add eafbff9f8d3 chore(deps-dev): bump globals from 17.9.0 to 17.10.0 in /docs (#43324)
add 53a8a0e1403 chore(deps): bump the docusaurus-openapi group in /docs with 2 updates (#43323)
add 01ce8358a6e chore(deps-dev): bump globals from 17.9.0 to 17.10.0 in /superset-websocket (#43321)
add 8222db33405 fix(dataset): preserve legacy default dashboard URLs (#43190)
add 6d77efad29c fix(chart): stop contextmenu propagation in BigNumberViz (#43267)
add 8c500ccee1f fix(users): show password validation errors (#43191)
add c10054f521e fix(plugin-chart-chord): declare react as a peerDependency (#43304)
add b8fca2145d9 chore(deps): bump astral-sh/setup-uv from 9.0.0 to 10.0.0 (#43322)
add faf7c34c0a9 fix(explore): legacy boolean filters and limit available operators based on calculated column type (#43341)
add 5a96c3f538f chore(ci): disable Git commit info capture in Playwright E2E tests to avoid timeout (#43213)
add c2d653b4b80 fix: set maxHeight of List components to height when in AutoSizer (#43056)
add f9cedf84e20 fix: drop post-processing options the operation no longer accepts (#42927)
add 5d4358a1493 chore(deps): bump google-auth-library from 11.0.1 to 11.0.2 in /superset-frontend (#43364)
add 80bba12d0fc chore(deps-dev): bump globals from 17.10.0 to 17.11.0 in /docs (#43363)
add b288db91f95 chore(deps): bump github/codeql-action/init from 4.37.6 to 4.37.7 (#43362)
add 8b67fb4d308 chore(deps-dev): bump globals from 17.10.0 to 17.11.0 in /superset-websocket (#43360)
add fdd3945dded chore(deps): bump github/codeql-action/analyze from 4.37.6 to 4.37.7 (#43361)
add e7dccd44a7c fix(reports): prevent blank/partial report PDFs from virtualized charts (#43348)
add 2ff79bd4950 fix(github): point the issue templates at labels that exist (#43357)
add c0884c0f0cc fix(explore): keep x-axis label when overriding Time Column with time comparison (#42875)
add 1ef12580a7a fix(chart): ignore chart actions for a chart no longer in state (#43228)
add 1ca5e61f544 chore: Unset future flag in engines and sessions. (#43273)
add 83c6ea4e03d fix(explore): show the empty state when Samples returns no result payload (#43115)
add 148ffaff501 fix(plugin-chart-echarts): omit stacked value labels on zero-height segments (#42756)
add b5fe00b407d test(frontend): shrink flaky/misplaced recently-archived e2e coverage to Jest unit tests (#43264)
add bcfb4346f6b fix(mcp): honor use_cache and cache_timeout in get_chart_data (#43349)
add 271564cb0da feat(config): add EXTRA_PANDAS_POSTPROCESSING_OPS extension point (#43337)
add 42ba2a4433f fix(reports): humanize day-of-month + day-of-week crontabs as OR (#43307)
add 7441ce90aea fix(charts): align grain-less time comparisons safely (#43315)
add 01b1d58ac97 fix(plugin-chart-echarts): restore tooltips for metrics labelled like⦠(#43369)
add 18a36d04c72 fix(mcp): preserve user-authored result values (#43202)
add 18fc2c62286 fix(sqllab): stop copying a permalink when opening a saved query (#43147)
add 27ea5de44a0 fix(i18n-es): correct case/number collapse in the semantic-layer labels (#43311)
add 22396d504a5 fix(ux): use title case for button labels (#40048)
add f7d505e1fd0 fix(listview): stop card clicks creating a duplicate history entry (#43310)
add fb53761ec8a chore(deps-dev): bump baseline-browser-mapping from 2.11.13 to 2.11.14 in /superset-frontend (#43381)
add 87743ef3f83 chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /superset-frontend (#43380)
add 14408eb3db9 chore(deps-dev): bump the storybook group in /superset-frontend with 5 updates (#43379)
add 132340b6529 chore(deps): bump astral-sh/setup-uv from 10.0.0 to 10.0.1 (#43378)
add 6e22050b509 chore(deps): bump the storybook group in /docs with 2 updates (#43377)
add 65910abf21f fix(sqllab): disable Save dataset until the query runs successfully (#43330)
add e45dd2d3f16 ci: pull CI service images from GHCR mirror (fork-safe) [depends on #40880] (#40882)
add 05842a6350f feat(metrics): add MEDIAN/STDDEV_SAMP/VAR_SAMP as system-wide aggregates (#42895)
add a05a0999877 fix(embedded): block custom SQL injection in guest user chart payloads (#43111)
add d422f5b4b68 fix: last date label hidden on time series x-axis (#39899) (#42299)
add fd7095df9a5 fix(explore): align viz type gallery thumbnails and Featured tag (#43373)
add 03eac279e5f fix(explore): exclude permalink_key from chart URL params (#43354)
add edda9d1bbbc fix(frontend): tighten SQL Lab autorun scoping and HTML-rendering defaults (#43398)
add aee98b527d1 fix(charts): escape untrusted strings before rendering into chart tooltips and popups (#43397)
add 2b6044b624a fix: tighten SSRF validation, executor resolution, and cache scoping across reports/thumbnails (#43395)
add 04017f39568 fix(sqllab): re-validate access against rendered SQL and tighten cache/permalink scoping (#43394)
add 65893113fed fix(import): tighten ownership and validation checks across asset importers (#43393)
add 9781254363f fix(export): escape formula-triggering values consistently and bound post-processing inputs (#43396)
add 5f3e34908cc fix(charts): surface blocking alerts/reports when archiving a chart (#43402)
add 5812c0eab56 fix(mcp): fail closed when MCP_AUTH_FACTORY raises (#43329)
add 09bd8c98de2 feat(chart): enable cross-filter on temporal x-axis (bar/label click) (#42792)
add f2610e9dca0 fix(sqllab): default PostgreSQL port to 5432 in the dynamic connection form (#43351)
add 9f505eb0cbb fix(examples): replace deprecated timeseries_limit_metric with series_limit_metric (#43422)
add c3ed8b312d5 fix(security): surface extra_editors in dashboard/chart lists (#43392)
add 5ffb72151e8 chore(deps): bump react-error-boundary from 6.1.2 to 6.1.3 in /superset-frontend (#43451)
add 90a3d930022 chore(deps): bump dayjs from 1.11.21 to 1.11.22 in /superset-frontend (#43450)
add 8fa48d73f69 chore(deps-dev): bump concurrently from 10.0.4 to 10.0.5 in /superset-frontend (#43449)
add af859717a73 chore: remove two stale codecov ignore paths (#43438)
add e7756aeef94 chore(deps): bump immer from 11.1.16 to 11.1.17 in /superset-frontend (#43448)
add 7196ce8a0c8 chore(deps): bump docker/setup-buildx-action from 4.2.0 to 4.3.0 (#43445)
add dcac129b514 chore(deps): bump js-yaml from 5.2.3 to 5.3.0 in /docs (#43442)
add 4623d9219af fix: update in the wild link on community page (#43403)
add 8a323241846 fix: add missing ownership checks to tag, report-log, and dataset-schema endpoints (#43390)
add 7f1b41444c8 fix: add missing access checks to semantic-layer and theme endpoints (#43389)
add 15b98aa6da0 fix(plugin-chart-echarts): apply contribution before rename with time comparison (#43384)
add 3f10d8b1ccb fix(versioning): suppress automatic chart normalization changes (#43350)
add 649c062825a chore(deps): bump baseline-browser-mapping from 2.11.13 to 2.11.15 in /docs (#43444)
add f3142e7b15b fix(tags): fix broken import in daos/tag.py (#43466)
add 2c02965f2bf chore(deps): bump @swc/core from 1.15.47 to 1.16.0 in /docs (#43443)
add e450acf1c70 chore(deps): bump sqlglot from 30.16.0 to 30.17.0 (#43418)
add a392e8b1024 chore(deps): bump marshmallow from 4.3.0 to 4.3.1 (#43417)
add db539288acb chore(deps-dev): update teradatasql requirement from >=20.0.0.64 to >=20.0.0.65 (#43416)
add ceb75b93503 chore(deps): bump sqlalchemy from 2.0.51 to 2.0.52 (#43415)
add 8591f52cedf chore(deps): bump pyarrow from 25.0.0 to 25.0.1 (#43414)
add f1f63478852 chore(deps-dev): bump prophet from 1.3.0 to 1.4.0 (#43412)
add 1bde62f9973 chore(deps-dev): bump gevent from 26.7.0 to 26.8.0 (#43411)
add 6eced8e9191 fix(roles): let the permissions dropdown size to its content (#43196)
add dc436c76f7a fix(datasets): keep a metric's warning text when editing from Explore (#43177)
add c980b3a3615 fix(mcp): tighten auth and request validation edge cases (#43388)
add bf5f3a9e6be test(dashboard): migrate drill-to-detail E2E from Cypress to Playwright (#41437)
add b0962ba5edb fix(plugin/chart/parallel-coordinate): prevent frontend crash with empty/undefined metrics when moving between pages quickly (#42392)
add 6ab21b381a6 fix(mysql): resolve wire-protocol column types and mutate rows from immutable results (#42821)
add a8a8b51afb8 fix(plugin-chart-table): guard row-indexed comparison-color lookups against undefined entries (#43139)
add 27ec80c07b0 fix(explore): clear stale custom time-shift date error (#43146)
add 31f06c0ee6d fix(dataset): correct Hours Offset filter bounds and grain-truncation order (#43173)
add c635d0754fc fix(explore): honor column Label in filter search and pill (#43404)
add 24b95f9ca7e fix(gsheets): correctly format Date-column filter literals (#43355)
add 7dbf71a3791 fix(query-object): reject malformed ad-hoc metrics (#43353)
add 94855e96262 fix(frontend): ignore stale list responses (#43306)
add ca3d7670b77 fix(ci): restore scheduled CI checks (#43266)
add 52571a5b8b1 chore(deps): bump the rjsf group in /superset-frontend with 3 updates (#43440)
add dfd057b9201 chore(deps-dev): update clickhouse-connect requirement from <2.0,>=1.6.0 to >=1.7.1,<2.0 (#43419)
add 7e3d092ac40 fix(soft-delete): name the recovery location in the archive confirmation (#43401)
add 107204a1fc6 fix(sqllab): allow SQL Lab query owners to create charts without all_datasource_access (#42479)
add 8b792ab6603 chore(deps-dev): bump @swc/core from 1.15.47 to 1.16.0 in /superset-frontend (#43446)
add a9d54a00379 fix(soft-delete): card-view chart delete shows the archive dialog (#43469)
add f83fb7c0e07 fix(archived-list): use the semantic-layers-aware label for the dataset type (#43465)
add bd7b7392122 chore: remove obsolete pandas/SQLAlchemy version compat shim (#43497)
add 6c2fef29cb7 feat(snowflake): Add support for OAuth 2.0 authentication (#36856)
add 9dd8c42f3d4 chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /superset-frontend (#43511)
add 7bad69f523c chore(deps): bump dayjs from 1.11.22 to 1.11.23 in /superset-frontend (#43510)
add d2aeb29223f chore(deps-dev): bump baseline-browser-mapping from 2.11.14 to 2.11.15 in /superset-frontend (#43508)
add cbfa94c4dd6 chore(deps): bump antd from 6.6.0 to 6.6.1 in /docs (#43506)
add d480152735e chore(deps): bump the storybook group in /docs with 2 updates (#43505)
add ef0ad01aa56 chore(deps-dev): bump the storybook group across 1 directory with 5 updates (#43507)
add fd3849cef1b chore(deps): bump antd from 6.6.0 to 6.6.1 in /superset-frontend (#43509)
add f9530f31abb fix(table): keep each metric's own aggregate in the summary row by default (#43421)
add 02b3e43b66b fix(number-format): preserve custom smart formatter id (#43439)
add 34ffa37aaa4 chore(ci): drop inert SQLALCHEMY_WARN_20 flag from unit-test CI (#43495)
add 3585e8235a7 fix(i18n): review Traditional Chinese count labels (#43063)
add fc4d7221ecb fix(explore): skip re-fetch when navigating away from /explore (#39506)
add f903e02d910 chore(deps): restore permissive marshmallow lower bound (>=3.0, <5) (#43521)
add 88d2c2954e5 feat(deletion-retention): persist purge block reason codes on the audit log (#43485)
add b89da3e9fca docs(versioning): fix post-flip doc and comment drift (#43493)
add 68386a53ee2 chore(database): remove dead extra validation exception classes (#42411)
add 90dab7cf61b fix(mcp): accept common chart input variants (#43130)
add 649d6f1b41f fix(mcp): defer unknown numeric types to compile (#43131)
add 0dcb2ca53a4 feat(maps): Add Italy regions and autonomous provinces country map (#42309)
add e6b9205821b fix(country-map): give Alborz its own ISO code instead of reusing Tehran's (#42429)
add 61ab0cdb5dd fix(ocient): update GIS test fixtures for pyocient's relocated geo types (#43496)
add 0514743034b Merge branch 'master' into tdd/issue-36304-meta-db-limit-drops-join-matches
No new revisions were added by this update.
Summary of changes:
.codecov.yml | 2 -
.github/CODEOWNERS | 16 +-
.github/ISSUE_TEMPLATE/bug-report.yml | 2 +-
.github/ISSUE_TEMPLATE/cosmetic.md | 2 +-
.github/actions/setup-backend/action.yml | 28 +-
.github/labeler.yml | 2 +-
.github/workflows/bump-python-package.yml | 8 +-
.github/workflows/check-db-migration-confict.yml | 3 +
.github/workflows/codeql-analysis.yml | 7 +-
.github/workflows/docker.yml | 63 +-
.../workflows/enforce-single-migration-head.yml | 3 +
.github/workflows/frontend-bundle-size-nightly.yml | 136 ++
.github/workflows/github-action-validator.yml | 3 +
.github/workflows/issue-creation.yml | 3 +
.github/workflows/labeler.yml | 3 +
.github/workflows/latest-release-tag.yml | 3 +
.github/workflows/mirror-service-images.yml | 2 +-
.github/workflows/pr-lint.yml | 3 +
.github/workflows/pre-commit.yml | 31 +-
.../scripts/check-docs-deploy-freshness.sh | 49 +
.../scripts/check-docs-deploy-freshness.test.sh | 100 ++
.github/workflows/showtime-cleanup.yml | 3 +
.github/workflows/showtime-trigger.yml | 3 +
.github/workflows/superset-docs-deploy.yml | 87 +-
.github/workflows/superset-e2e.yml | 11 +-
.github/workflows/superset-frontend.yml | 97 ++
.github/workflows/superset-helm-release.yml | 3 +
.github/workflows/superset-playwright.yml | 14 +
.../workflows/superset-python-integrationtest.yml | 12 +-
.github/workflows/superset-python-presto-hive.yml | 13 +-
.../workflows/superset-python-unittest-report.yml | 70 +
.github/workflows/superset-python-unittest.yml | 44 +-
.github/workflows/superset-translations.yml | 5 +-
.github/workflows/supersetbot.yml | 3 +
.github/workflows/welcome-new-users.yml | 3 +
AGENTS.md | 2 +-
CONTRIBUTING.md | 2 +-
README.md | 2 +
UPDATING.md | 74 +-
docker/pythonpath_dev/superset_config.py | 1 +
.../configuration/configuring-superset.mdx | 48 +
.../configuration/dashboard-performance.mdx | 184 +++
docs/admin_docs/configuration/mcp-server.mdx | 43 +-
docs/admin_docs/security/security.mdx | 14 +-
docs/data/countries.json | 1 +
.../contributing/development-setup.md | 24 +
.../frontend/component-style-guidelines.md | 2 +-
docs/docs/faq.mdx | 54 +-
docs/docs/using-superset/mobile-experience.mdx | 93 ++
docs/docs/using-superset/recently-archived.mdx | 8 +-
docs/docs/using-superset/version-history.mdx | 24 +-
docs/package.json | 30 +-
docs/sip/median-stddev-variance-aggregates.md | 236 +++
docs/src/pages/community.tsx | 2 +-
docs/static/feature-flags.json | 30 +-
.../img/screenshots/mobile/mobile_dashboard.jpg | Bin 0 -> 68479 bytes
.../screenshots/mobile/mobile_dashboard_list.jpg | Bin 0 -> 82502 bytes
.../screenshots/mobile/mobile_filter_drawer.jpg | Bin 0 -> 58074 bytes
docs/static/img/screenshots/mobile/mobile_home.jpg | Bin 0 -> 35338 bytes
.../img/screenshots/mobile/mobile_nav_drawer.jpg | Bin 0 -> 35385 bytes
.../img/screenshots/mobile/mobile_unsupported.jpg | Bin 0 -> 42668 bytes
docs/static/resources/openapi.json | 72 +-
docs/yarn.lock | 794 +++++-----
helm/superset/Chart.yaml | 2 +-
helm/superset/README.md | 28 +-
helm/superset/templates/pdb-beat.yaml | 2 +-
helm/superset/templates/pdb-flower.yaml | 2 +-
helm/superset/templates/pdb-mcp.yaml | 2 +-
helm/superset/templates/pdb-worker.yaml | 2 +-
helm/superset/templates/pdb-ws.yaml | 2 +-
helm/superset/templates/pdb.yaml | 2 +-
helm/superset/tests/pdb_test.yaml | 87 ++
helm/superset/values.yaml | 26 +-
pyproject.toml | 34 +-
requirements/base.in | 4 +-
requirements/base.txt | 12 +-
requirements/development.txt | 26 +-
scripts/benchmark_migration.py | 2 +-
scripts/change_detector.py | 1 +
scripts/docker-build-extra-flags.sh | 48 +
.../src/superset_core/semantic_layers/types.py | 8 +-
superset-core/tests/semantic_layers/test_types.py | 97 ++
superset-embedded-sdk/package-lock.json | 506 +++++++
superset-embedded-sdk/package.json | 1 +
superset-embedded-sdk/src/index.test.ts | 213 +++
superset-embedded-sdk/src/index.ts | 22 +
superset-frontend/package-lock.json | 1546 +++++++-------------
superset-frontend/package.json | 53 +-
.../packages/superset-core/src/common/index.ts | 1 +
.../components/ColumnTypeLabel/ColumnTypeLabel.tsx | 5 +
.../src/components/MetricOption.tsx | 16 +-
.../src/sections/timeComparison.tsx | 6 +
.../src/utils/getTotalsMetrics.test.ts | 106 ++
.../src/utils/getTotalsMetrics.ts | 63 +
.../superset-ui-chart-controls/src/utils/index.ts | 1 +
.../test/components/ColumnTypeLabel.test.tsx | 17 +
.../test/components/MetricOption.test.tsx | 23 +
.../packages/superset-ui-core/package.json | 6 +-
.../superset-ui-core/src/chart/types/Base.ts | 7 +
.../src/components/AsyncAceEditor/index.tsx | 3 +
.../src/components/AsyncAceEditor/types.ts | 3 +
.../src/components/Dropdown/Dropdown.test.tsx | 35 +-
.../src/components/Dropdown/index.tsx | 28 +-
.../src/components/DynamicEditableTitle/index.tsx | 16 +
.../src/components/PageHeaderWithActions/index.tsx | 18 +
.../src/components/Select/AsyncSelect.test.tsx | 10 +-
.../src/components/Select/Select.test.tsx | 6 +-
.../src/components/Select/types.ts | 3 +
.../factories/createSmartNumberFormatter.ts | 5 +-
.../superset-ui-core/src/query/types/Metric.ts | 5 +-
.../superset-ui-core/src/time-format/index.ts | 1 +
.../superset-ui-core/src/utils/featureFlags.ts | 1 +
.../superset-ui-core/src/utils/html.test.tsx | 37 +
.../packages/superset-ui-core/src/utils/html.tsx | 27 +-
.../packages/superset-ui-core/src/utils/tooltip.ts | 56 +-
.../factories/createSmartNumberFormatter.test.ts | 6 +
.../superset-ui-core/test/utils/tooltip.test.ts | 92 +-
superset-frontend/playwright.config.ts | 22 +
.../playwright/components/core/Menu.ts | 71 +-
.../playwright/components/modals/ConfirmDialog.ts | 6 +-
.../components/modals/DrillDetailModal.ts | 133 ++
.../playwright/components/modals/index.ts | 1 +
.../generators/docs/mobile-screenshots.spec.ts | 173 +++
.../playwright/pages/DashboardPage.ts | 121 ++
.../dashboard/dashboard-drill-to-detail.spec.ts | 747 ++++++++++
.../tests/mobile/mobile-dashboard.spec.ts | 284 ++++
.../tests/mobile/mobile-navigation.spec.ts | 192 +++
.../tests/recently-archived/delete-modal.spec.ts | 58 -
.../recently-archived/recently-archived.spec.ts | 57 +-
.../tests/version-history/activity-log.spec.ts | 127 +-
.../plugin-chart-ag-grid-table/src/buildQuery.ts | 27 +-
.../src/controlPanel.tsx | 31 +-
.../src/renderers/NumericCellRenderer.tsx | 12 +-
.../test/NumericCellRenderer.test.tsx | 59 +
.../test/buildQuery.test.ts | 88 ++
.../plugins/plugin-chart-calendar/src/Calendar.ts | 5 +-
.../plugins/plugin-chart-calendar/src/utils.ts | 8 +
.../src/vendor/cal-heatmap.ts | 21 +-
.../test/ReactCalendar.test.tsx | 23 +
.../plugin-chart-calendar/test/cal-heatmap.test.ts | 91 ++
.../plugin-chart-calendar/test/utils.test.ts | 25 +-
.../src/util/layerUtil.tsx | 27 +-
.../test/util/layerUtil.test.ts | 47 +-
.../plugins/plugin-chart-chord/package.json | 6 +-
.../scripts/Country Map GeoJSON Generator.ipynb | Bin 11004185 -> 11010873 bytes
.../plugin-chart-country-map/src/countries.ts | 5 +
.../src/countries/iran.geojson | Bin 134537 -> 134537 bytes
.../italy_regions_and_autonomous_provinces.geojson | Bin 0 -> 108915 bytes
.../test/countries.test.ts | 58 +
.../test/iran.geojson.test.ts | 69 +
.../src/BigNumber/BigNumberViz.test.tsx | 34 +
.../src/BigNumber/BigNumberViz.tsx | 1 +
.../src/BoxPlot/controlPanel.ts | 5 +-
.../src/Bubble/transformProps.test.ts | 70 +
.../src/Bubble/transformProps.ts | 7 +-
.../src/Gantt/transformProps.ts | 1 +
.../src/MixedTimeseries/transformProps.ts | 29 +-
.../src/MixedTimeseries/types.ts | 3 +
.../plugin-chart-echarts/src/Radar/utils.ts | 16 +-
.../src/Timeseries/EchartsTimeseries.test.tsx | 833 ++++++++++-
.../src/Timeseries/EchartsTimeseries.tsx | 248 +++-
.../src/Timeseries/buildQuery.ts | 7 +-
.../src/Timeseries/constants.ts | 1 +
.../src/Timeseries/transformProps.ts | 36 +-
.../src/Timeseries/transformers.ts | 8 +
.../plugin-chart-echarts/src/Timeseries/types.ts | 3 +
.../src/components/Echart.test.tsx | 36 +-
.../plugin-chart-echarts/src/components/Echart.tsx | 26 +-
.../plugins/plugin-chart-echarts/src/controls.tsx | 22 +
.../src/utils/eChartOptionsSchema.ts | 43 +-
.../plugin-chart-echarts/src/utils/forecast.ts | 29 +-
.../src/utils/safeEChartOptionsParser.test.ts | 70 +
.../plugin-chart-echarts/src/utils/series.ts | 43 +-
.../plugin-chart-echarts/src/utils/treeBuilder.ts | 125 +-
.../src/utils/xAxisDrillByFilter.ts | 164 +++
.../test/BoxPlot/controlPanel.test.ts | 57 +
.../test/MixedTimeseries/transformProps.test.ts | 161 ++
.../plugin-chart-echarts/test/Radar/utils.test.ts | 38 +
.../test/Timeseries/Bar/transformProps.test.ts | 90 ++
.../test/Timeseries/EchartsTimeseries.test.tsx | 426 +++++-
.../test/Timeseries/buildQuery.test.ts | 22 +
.../test/Timeseries/transformProps.test.ts | 220 +++
.../test/Timeseries/transformers.test.ts | 78 +-
.../test/utils/forecast.test.ts | 88 +-
.../plugin-chart-echarts/test/utils/series.test.ts | 112 +-
.../test/utils/treeBuilder.test.ts | 72 +
.../test/utils/xAxisDrillByFilter.test.ts | 238 +++
.../src/transformProps.ts | 2 +-
.../test/transformProps.test.ts} | 32 +-
.../test/plugin/utilities.test.ts | 19 +
.../plugin-chart-point-cluster-map/package.json | 4 +-
.../plugins/plugin-chart-table/src/TableChart.tsx | 12 +-
.../plugins/plugin-chart-table/src/buildQuery.ts | 4 +
.../plugin-chart-table/src/controlPanel.tsx | 29 +
.../plugin-chart-table/test/TableChart.test.tsx | 54 +
.../plugin-chart-table/test/buildQuery.test.ts | 84 ++
.../plugins/plugin-chart-world-map/src/WorldMap.ts | 25 +-
.../plugin-chart-world-map/test/WorldMap.test.ts | 27 +
superset-frontend/scripts/bundle-size-summary.js | 86 ++
.../scripts/oxlint-metrics-uploader.js | 58 +-
superset-frontend/spec/helpers/mobileTestUtils.ts | 169 +++
superset-frontend/spec/helpers/testing-library.tsx | 2 +-
.../spec/scripts/bundle-size-summary.test.js | 110 ++
.../spec/scripts/oxlint-metrics-uploader.test.js | 58 +
superset-frontend/src/SqlLab/actions/sqlLab.ts | 12 +-
.../components/EditorWrapper/useKeywords.test.ts | 160 ++
.../SqlLab/components/EditorWrapper/useKeywords.ts | 63 +-
.../src/SqlLab/components/ResultSet/index.tsx | 4 +-
.../SaveDatasetActionButton.test.tsx | 26 +-
.../components/SaveDatasetActionButton/index.tsx | 9 +-
.../SqlLab/components/SaveQuery/SaveQuery.test.tsx | 1 +
.../src/SqlLab/components/SaveQuery/index.tsx | 3 +
.../SqlLab/components/SqlEditor/SqlEditor.test.tsx | 42 +
.../src/SqlLab/components/SqlEditor/index.tsx | 10 +-
.../SqlEditorTabHeader/SqlEditorTabHeader.test.tsx | 8 +-
.../SqlLab/components/SqlEditorTabHeader/index.tsx | 15 +-
.../TabbedSqlEditors/TabbedSqlEditors.test.tsx | 6 +-
.../src/SqlLab/reducers/sqlLab.test.ts | 43 +
superset-frontend/src/SqlLab/reducers/sqlLab.ts | 13 +-
.../ChartContextMenu/ChartContextMenu.test.tsx | 70 +-
.../Chart/ChartContextMenu/ChartContextMenu.tsx | 27 +-
.../Chart/DrillBy/DrillBySubmenu.test.tsx | 134 ++
.../components/Chart/DrillBy/DrillBySubmenu.tsx | 112 +-
.../src/components/Chart/chartReducer.ts | 5 +
.../src/components/Chart/chartReducers.test.ts | 16 +
.../useDrillDetailMenuItems.test.tsx | 5 +
.../DatasourceModal/DatasourceModal.test.tsx | 8 +-
.../Datasource/DatasourceModal/index.tsx | 2 +-
.../DatasourceEditor/DatasourceEditor.tsx | 73 +-
.../tests/DatasourceEditor.test.tsx | 11 +
.../DatasourceEditorMetricCertification.test.tsx | 73 +
.../tests/DatasourceEditorWarningMarkdown.test.tsx | 97 ++
.../tests/hydrateMetricExtra.test.ts | 96 ++
.../Datasource/components/Fieldset/index.tsx | 16 +-
.../ErrorMessage/BasicErrorAlert.test.tsx | 9 +-
.../ErrorMessage/DatabaseErrorMessage.test.tsx | 9 +-
.../DatasetNotFoundErrorMessage.test.tsx | 9 +-
.../ErrorMessageWithStackTrace.test.tsx | 9 +-
.../FrontendNetworkErrorMessage.test.tsx | 9 +-
.../ErrorMessage/ParameterErrorMessage.test.tsx | 9 +-
.../ErrorMessage/TimeoutErrorMessage.test.tsx | 9 +-
.../src/components/FilterableTable/index.tsx | 2 +-
.../src/components/FilterableTable/utils.test.tsx | 29 +
.../src/components/FilterableTable/utils.tsx | 6 +-
.../src/components/ListView/CardCollection.tsx | 13 +
.../src/components/ListView/ListView.test.tsx | 224 +++
.../src/components/ListView/ListView.tsx | 103 +-
superset-frontend/src/components/ListView/utils.ts | 25 +-
.../MobileRouteGuard/MobileRouteGuard.test.tsx | 64 +
.../src/components/MobileRouteGuard/index.tsx | 52 +
.../modals/index.ts => src/constants.test.ts} | 22 +-
superset-frontend/src/constants.ts | 1 +
.../src/core/editors/AceEditorProvider.tsx | 14 +-
.../src/dashboard/actions/dashboardState.test.ts | 101 +-
.../src/dashboard/actions/dashboardState.ts | 89 +-
.../src/dashboard/actions/nativeFilters.ts | 14 +-
.../DashboardBuilder/DashboardBuilder.test.tsx | 49 +
.../DashboardBuilder/DashboardBuilder.tsx | 87 +-
.../DashboardBuilder/DashboardWrapper.tsx | 17 +
.../dashboard/components/DashboardBuilder/state.ts | 15 +-
.../dashboard/components/Header/Header.test.tsx | 7 +
.../src/dashboard/components/Header/index.tsx | 48 +-
.../src/dashboard/components/Header/types.ts | 4 +
.../Header/useHeaderActionsDropdownMenu.tsx | 81 +-
.../PropertiesModal/PropertiesModal.test.tsx | 51 +
.../dashboard/components/PropertiesModal/index.tsx | 2 +-
.../src/dashboard/components/SliceAdder.tsx | 2 +-
.../components/SliceHeader/SliceHeader.test.tsx | 42 +
.../src/dashboard/components/SliceHeader/index.tsx | 7 +-
.../ChartHolder/ChartHolder.test.tsx | 147 +-
.../gridComponents/ChartHolder/ChartHolder.tsx | 64 +-
.../components/gridComponents/Row/Row.tsx | 22 +
.../gridComponents/TabsRenderer/TabsRenderer.tsx | 55 +-
.../FilterControls/GroupByFilterCard.test.tsx | 38 +-
.../FilterBar/FilterControls/GroupByFilterCard.tsx | 2 +-
.../nativeFilters/FilterBar/Vertical.tsx | 74 +-
.../components/nativeFilters/FilterBar/index.tsx | 1 +
.../components/nativeFilters/FilterBar/types.ts | 5 +
.../FiltersConfigForm/DatasetSelect.test.tsx | 2 +-
.../transformers/buildTarget.test.ts | 10 +
.../FiltersConfigModal/transformers/buildTarget.ts | 12 +-
.../transformers/customizationTransformer.test.ts | 102 ++
.../transformers/customizationTransformer.ts | 5 +-
.../transformers/filterTransformer.test.ts | 156 ++
.../transformers/filterTransformer.ts | 7 +-
.../nativeFilters/FiltersConfigModal/utils.ts | 70 -
.../components/resizable/ResizableContainer.tsx | 16 +
.../src/dashboard/util/permissionUtils.test.ts | 15 +
.../src/dashboard/util/permissionUtils.ts | 7 +-
superset-frontend/src/embedded/api.test.ts | 155 ++
superset-frontend/src/embedded/api.tsx | 57 +
superset-frontend/src/embedded/index.tsx | 1 +
.../src/explore/actions/hydrateExplore.test.ts | 76 +-
.../src/explore/actions/hydrateExplore.ts | 34 +-
.../src/explore/actions/saveModalActions.test.ts | 248 +++-
.../src/explore/actions/saveModalActions.ts | 97 +-
.../DataTablesPane/components/SamplesPane.tsx | 15 +-
.../components/useGridResultTable.tsx | 6 +-
.../DataTablesPane/test/SamplesPane.test.tsx | 46 +
.../components/DatasourcePanel/DatasourceItems.tsx | 2 +-
.../ExploreChartHeader/ExploreChartHeader.test.tsx | 11 +-
.../AnnotationLayer.test.tsx | 8 +-
.../AnnotationLayerControl/AnnotationLayer.tsx | 2 +-
.../ColorBreakpointOption.test.tsx | 25 +
.../ColorBreakpointOption.tsx | 17 +-
.../controls/ColumnConfigControl/constants.tsx | 7 +
.../DatasourceControl/DatasourceControl.test.tsx | 6 +-
.../ColumnSelectPopover.test.tsx | 16 +-
.../DndAdhocFilterOption.tsx | 2 +-
.../DndFilterSelect.test.tsx | 31 +-
.../FilterControl/AdhocFilter/AdhocFilter.test.ts | 96 ++
.../controls/FilterControl/AdhocFilter/index.ts | 29 +-
.../FilterControl/AdhocFilterEditPopover/index.tsx | 18 +-
...AdhocFilterEditPopoverSimpleTabContent.test.tsx | 175 +++
.../index.tsx | 130 +-
.../AdhocFilterOption/AdhocFilterOption.test.tsx | 18 +
.../FilterControl/AdhocFilterOption/index.tsx | 2 +-
.../controls/FilterControl/utils/translateToSQL.ts | 45 +-
.../FixedOrMetricControl.test.tsx | 9 +-
.../controls/MetricControl/AdhocMetric.test.ts | 39 +
.../controls/MetricControl/AdhocMetric.ts | 13 +
.../AdhocMetricEditPopover.test.tsx | 16 +-
.../MetricControl/AdhocMetricEditPopover/index.tsx | 3 +-
.../VizTypeControl/VizTypeControl.test.tsx | 18 +
.../controls/VizTypeControl/VizTypeGallery.tsx | 60 +-
.../useExploreAdditionalActionsMenu/index.tsx | 66 +-
.../useExploreAdditionalActionsMenu.test.tsx | 109 +-
superset-frontend/src/explore/constants.ts | 66 +-
.../exploreUtils/getSimpleSQLExpression.test.ts | 11 +
.../src/explore/exploreUtils/index.ts | 13 +-
.../src/explore/reducers/exploreReducer.test.ts | 75 +-
.../src/features/apiKeys/ApiKeyCreateModal.tsx | 34 +-
.../src/features/apiKeys/ApiKeyList.tsx | 13 +
.../src/features/apiKeys/apiKeyScopes.test.ts | 50 +
.../src/features/apiKeys/apiKeyScopes.ts | 55 +
.../src/features/charts/ChartCard.test.tsx | 167 +++
.../src/features/charts/ChartCard.tsx | 48 +-
.../src/features/dashboards/DashboardCard.test.tsx | 51 +-
.../src/features/dashboards/DashboardCard.tsx | 24 +-
.../databases/DatabaseModal/ExtraOptions.tsx | 7 +-
.../databases/DatabaseModal/index.test.tsx | 3 +-
.../UploadDataModel/UploadDataModal.test.tsx | 12 +-
.../AddDataset/DatasetPanel/DatasetPanel.test.tsx | 9 +-
.../DatasetPanel/DatasetPanelWrapper.test.tsx | 9 +-
.../src/features/home/ActivityTable.tsx | 28 +-
.../src/features/home/EmptyState.test.tsx | 39 +
superset-frontend/src/features/home/EmptyState.tsx | 10 +-
superset-frontend/src/features/home/Menu.tsx | 75 +-
.../src/features/home/RightMenu.test.tsx | 127 +-
superset-frontend/src/features/home/RightMenu.tsx | 197 ++-
.../src/features/home/SubMenu.test.tsx | 32 +
superset-frontend/src/features/home/SubMenu.tsx | 66 +-
superset-frontend/src/features/home/types.ts | 1 +
.../src/features/roles/RoleFormItems.test.tsx | 6 +-
.../src/features/roles/RoleFormItems.tsx | 6 +
.../src/features/users/UserListModal.tsx | 41 +-
superset-frontend/src/features/users/utils.test.ts | 99 ++
superset-frontend/src/features/users/utils.ts | 41 +-
.../features/versionHistory/normalization.test.ts | 158 ++
.../src/features/versionHistory/normalization.ts | 197 +++
.../src/features/versionHistory/reducer.test.ts | 56 +
.../src/features/versionHistory/reducer.ts | 133 +-
.../versionHistory/sessionLogMiddleware.test.ts | 46 +-
.../versionHistory/sessionLogMiddleware.ts | 85 +-
.../src/features/versionHistory/types.ts | 41 +
superset-frontend/src/hooks/useIsMobile.ts | 88 ++
.../src/pages/ArchivedList/ArchivedList.test.tsx | 137 ++
superset-frontend/src/pages/ArchivedList/index.tsx | 19 +-
superset-frontend/src/pages/Chart/Chart.test.tsx | 48 +-
superset-frontend/src/pages/Chart/index.tsx | 10 +
.../src/pages/ChartList/ChartList.test.tsx | 254 ++++
superset-frontend/src/pages/ChartList/index.tsx | 224 ++-
.../src/pages/DashboardList/DashboardList.test.tsx | 7 +
.../src/pages/DashboardList/index.tsx | 41 +-
.../DatasetList/DatasetList.listview.test.tsx | 28 +
.../DatasetList/DatasetList.subdirectory.test.tsx | 37 +-
superset-frontend/src/pages/DatasetList/index.tsx | 9 +-
.../src/pages/Home/Home.mobile.test.tsx | 183 +++
superset-frontend/src/pages/Home/Home.test.tsx | 9 +-
superset-frontend/src/pages/Home/index.tsx | 43 +-
.../MobileUnsupported/MobileUnsupported.test.tsx | 95 ++
.../src/pages/MobileUnsupported/index.tsx | 141 ++
.../pages/SavedQueryList/SavedQueryList.test.tsx | 141 +-
.../src/pages/SavedQueryList/index.tsx | 22 +-
.../src/pages/SqlLab/LocationContext.test.tsx | 66 +
.../src/pages/SqlLab/LocationContext.tsx | 6 +-
superset-frontend/src/types/Chart.ts | 2 +
superset-frontend/src/utils/softDeleteCopy.test.ts | 18 +-
superset-frontend/src/utils/softDeleteCopy.ts | 21 +-
superset-frontend/src/views/App.tsx | 37 +-
superset-frontend/src/views/CRUD/hooks.test.tsx | 156 ++
superset-frontend/src/views/CRUD/hooks.ts | 31 +-
superset-frontend/src/views/CRUD/types.ts | 2 +
superset-frontend/src/views/CRUD/utils.test.tsx | 60 +
superset-frontend/src/views/CRUD/utils.tsx | 30 +-
superset-frontend/src/views/routes.tsx | 36 +-
.../components/LeftCell/LeftCell.test.tsx | 55 +
.../TimeTable/components/LeftCell/LeftCell.tsx | 19 +-
.../tools/webpack.proxy-config.test.js | 272 ++++
superset-frontend/webpack.config.js | 10 +
superset-frontend/webpack.proxy-config.js | 102 +-
superset-websocket/package-lock.json | 320 ++--
superset-websocket/package.json | 16 +-
superset-websocket/spec/index.test.ts | 36 +
superset-websocket/src/index.ts | 14 +-
superset/__init__.py | 10 -
superset/charts/api.py | 30 +-
superset/charts/client_processing.py | 16 +-
superset/charts/data/api.py | 13 +-
superset/charts/data/form_data.py | 63 +
superset/charts/schemas.py | 78 +-
superset/cli/test_db.py | 3 -
superset/commands/chart/delete.py | 60 +-
superset/commands/chart/update.py | 25 +-
.../commands/dashboard/importers/dispatcher.py | 12 +-
superset/commands/database/exceptions.py | 36 -
superset/commands/database/importers/v1/utils.py | 82 +-
superset/commands/database/oauth2.py | 15 +
superset/commands/dataset/importers/dispatcher.py | 12 +-
superset/commands/dataset/importers/v1/utils.py | 92 +-
superset/commands/deletion_retention/audit.py | 122 +-
.../commands/deletion_retention/force_purge.py | 2 +-
.../commands/deletion_retention/purge_cascade.py | 36 +-
.../commands/deletion_retention/purge_policy.py | 94 +-
superset/commands/importers/v1/utils.py | 139 +-
superset/commands/query/importers/v1/utils.py | 42 +-
superset/commands/report/create.py | 2 +-
superset/commands/report/execute.py | 78 +-
superset/commands/semantic_layer/create.py | 8 +-
superset/commands/semantic_layer/delete.py | 19 +-
superset/commands/semantic_layer/update.py | 13 +-
superset/commands/sql_lab/execute.py | 26 +
superset/commands/sql_lab/permalink/get.py | 23 +-
superset/commands/sql_lab/results.py | 10 +
.../commands/sql_lab/streaming_export_command.py | 10 +
superset/commands/streaming_export/base.py | 36 +-
superset/commands/tag/create.py | 7 +-
superset/commands/tag/delete.py | 49 +-
superset/commands/tag/exceptions.py | 13 +
superset/commands/tag/update.py | 7 +-
superset/commands/tag/utils.py | 21 -
superset/commands/theme/import_themes.py | 12 +
superset/commands/theme/update.py | 10 +
superset/commands/utils.py | 25 +
superset/commands/version_restore.py | 4 +-
superset/common/form_data_query_context.py | 4 +-
superset/common/query_context_factory.py | 21 +-
superset/common/query_context_processor.py | 47 +-
superset/common/query_object.py | 141 +-
superset/config.py | 38 +-
superset/connectors/sqla/models.py | 100 +-
superset/daos/dashboard.py | 16 +-
superset/daos/report.py | 16 +-
superset/daos/tag.py | 18 +-
superset/dashboards/api.py | 85 +-
superset/dashboards/filter_scope.py | 275 ++++
superset/dashboards/filters.py | 119 +-
superset/databases/schemas.py | 24 +
superset/datasets/schemas.py | 21 +-
superset/datasource/api.py | 5 +
superset/db_engine_specs/README.md | 8 +-
superset/db_engine_specs/__init__.py | 23 +-
superset/db_engine_specs/base.py | 197 ++-
superset/db_engine_specs/bigquery.py | 7 +
superset/db_engine_specs/clickhouse.py | 67 +-
superset/db_engine_specs/cockroachdb.py | 9 +-
superset/db_engine_specs/databricks.py | 5 +
superset/db_engine_specs/doris.py | 8 +-
superset/db_engine_specs/duckdb.py | 51 +-
superset/db_engine_specs/greenplum.py | 10 +
superset/db_engine_specs/gsheets.py | 25 +-
superset/db_engine_specs/hana.py | 8 +-
superset/db_engine_specs/hive.py | 6 +
superset/db_engine_specs/hologres.py | 10 +
superset/db_engine_specs/mssql.py | 5 +
superset/db_engine_specs/mysql.py | 92 +-
superset/db_engine_specs/netezza.py | 9 +
superset/db_engine_specs/oceanbase.py | 9 +-
superset/db_engine_specs/postgres.py | 87 ++
superset/db_engine_specs/redshift.py | 22 +-
superset/db_engine_specs/risingwave.py | 10 +
superset/db_engine_specs/snowflake.py | 195 ++-
superset/db_engine_specs/sqlite.py | 22 +-
superset/db_engine_specs/starrocks.py | 9 +-
superset/db_engine_specs/sybase.py | 5 +
superset/db_engine_specs/vertica.py | 9 +
superset/db_engine_specs/yugabytedb.py | 10 +
superset/examples/birth_names.py | 8 +-
.../examples/usa_births_names/charts/Boys.yaml | 2 +-
.../examples/usa_births_names/charts/Girls.yaml | 2 +-
superset/examples/utils.py | 2 +-
.../charts/Life_Expectancy_VS_Rural.yaml | 49 +-
superset/extensions/cache_middleware.py | 8 +-
superset/extensions/storage/api.py | 10 +-
superset/initialization/__init__.py | 42 +-
superset/jinja_context.py | 106 +-
superset/mcp_service/README.md | 21 +-
superset/mcp_service/__main__.py | 27 +-
superset/mcp_service/annotation_layer/schemas.py | 78 +-
superset/mcp_service/app.py | 35 +-
superset/mcp_service/auth.py | 256 +++-
superset/mcp_service/caching.py | 48 +-
superset/mcp_service/chart/chart_helpers.py | 2 +
superset/mcp_service/chart/chart_utils.py | 237 ++-
superset/mcp_service/chart/plugins/histogram.py | 28 +-
superset/mcp_service/chart/plugins/table.py | 19 +-
.../chart/prompts/create_chart_guided.py | 4 +-
.../mcp_service/chart/resources/chart_configs.py | 2 +
superset/mcp_service/chart/schemas.py | 336 ++---
superset/mcp_service/chart/tool/delete_chart.py | 12 +-
superset/mcp_service/chart/tool/generate_chart.py | 146 +-
superset/mcp_service/chart/tool/get_chart_data.py | 369 ++---
superset/mcp_service/chart/tool/get_chart_info.py | 44 +-
.../mcp_service/chart/tool/get_chart_preview.py | 95 +-
superset/mcp_service/chart/tool/get_chart_sql.py | 30 +-
superset/mcp_service/chart/tool/list_charts.py | 3 +-
superset/mcp_service/chart/tool/restore_chart.py | 60 +-
superset/mcp_service/chart/tool/update_chart.py | 45 +-
.../mcp_service/chart/tool/update_chart_preview.py | 56 +-
.../chart/validation/dataset_validator.py | 143 +-
superset/mcp_service/chart/validation/pipeline.py | 2 +-
.../chart/validation/runtime/format_validator.py | 9 +-
superset/mcp_service/common/schema_discovery.py | 3 +
superset/mcp_service/composite_token_verifier.py | 54 +-
superset/mcp_service/dashboard/schemas.py | 524 ++-----
.../mcp_service/dashboard/tool/delete_dashboard.py | 14 +-
.../dashboard/tool/duplicate_dashboard.py | 13 +-
.../dashboard/tool/get_dashboard_info.py | 17 +-
.../mcp_service/dashboard/tool/list_dashboards.py | 12 +-
.../dashboard/tool/manage_native_filters.py | 26 +-
.../dashboard/tool/restore_dashboard.py | 65 +-
superset/mcp_service/dataset/schemas.py | 215 +--
.../dataset/tool/create_virtual_dataset.py | 22 +-
superset/mcp_service/dataset/tool/list_datasets.py | 11 +-
superset/mcp_service/dataset/tool/query_dataset.py | 3 +
.../dataset/tool/update_dataset_metric.py | 49 +-
superset/mcp_service/mcp_config.py | 157 +-
superset/mcp_service/mcp_core.py | 22 +
superset/mcp_service/middleware.py | 112 +-
superset/mcp_service/report/schemas.py | 18 +-
superset/mcp_service/role/schemas.py | 19 +-
superset/mcp_service/server.py | 66 +-
superset/mcp_service/session_scope.py | 69 +
superset/mcp_service/sql_lab/tool/execute_sql.py | 7 +-
.../sql_lab/tool/open_sql_lab_with_context.py | 85 +-
superset/mcp_service/system/schemas.py | 28 +-
superset/mcp_service/system/tool/find_users.py | 12 +-
superset/mcp_service/system/tool/get_schema.py | 9 +-
superset/mcp_service/tag/schemas.py | 32 +-
superset/mcp_service/task/schemas.py | 11 +-
superset/mcp_service/theme/schemas.py | 50 +-
superset/mcp_service/theme/tool/create_theme.py | 10 +-
superset/mcp_service/user/schemas.py | 30 +-
superset/mcp_service/utils/__init__.py | 2 -
superset/mcp_service/utils/sanitization.py | 146 --
superset/mcp_service/utils/token_utils.py | 62 +-
superset/migrations/shared/catalogs.py | 4 +-
..._08-54_c3a8f8611885_materializing_permission.py | 2 +-
...d8bc074f7aad_add_new_field_is_restricted_to_.py | 2 +-
...06-27_08-43_27ae655e4247_make_creator_owners.py | 2 +-
...-09-07_23-50_33d996bcc382_update_slice_model.py | 4 +-
...2_11-31_eca4694defa7_sqllab_setting_defaults.py | 2 +-
...4_12-31_db0c65b146bd_update_slice_model_json.py | 2 +-
...7c195a_rewriting_url_from_shortner_with_new_.py | 2 +-
...-08_08-19_67a6ac9b727b_update_spatial_params.py | 2 +-
...2-17_11-06_21e88bc06c02_annotation_migration.py | 4 +-
.../2018-02-13_08-07_e866bd2d4976_smaller_grid.py | 4 +-
...-04-03_08-19_130915240929_is_sqllab_viz_flow.py | 2 +-
...9_bf706ae5eb46_cal_heatmap_metric_to_metrics.py | 2 +-
...018-06-04_11-12_c5756bec8b47_time_grain_sqla.py | 4 +-
...6-07_09-52_afb7730f6a9c_remove_empty_filters.py | 2 +-
...13_10-20_4451805bbaa1_remove_double_percents.py | 4 +-
.../2018-06-13_14-54_bddc498dd179_adhoc_filters.py | 4 +-
...4_14-31_80a67c5192fa_single_pie_chart_metric.py | 4 +-
...1c4c6_migrate_num_period_compare_and_period_.py | 4 +-
.../2018-07-19_23-41_c617da68de7d_form_nullable.py | 2 +-
...07-20_15-31_7f2635b51f5d_update_base_columns.py | 2 +-
...07-20_15-57_e9df189e5c7e_update_base_metrics.py | 2 +-
..._bebcf3fed1fe_convert_dashboard_v1_positions.py | 2 +-
.../versions/2018-08-01_11-47_7fcdcde0761c_.py | 2 +-
...08545_migrate_time_range_for_default_filters.py | 2 +-
...2018-12-11_22-03_fb13d49b72f9_better_filters.py | 4 +-
...e1b21cd94a4_change_owner_to_m2m_relation_on_.py | 2 +-
.../2019-03-21_10-22_d94d33dbe938_form_strip.py | 2 +-
...a3f04bc82_add_parent_ids_in_dashboard_layout.py | 4 +-
.../2019-06-28_13-17_ab8c66efdd01_resample.py | 4 +-
...ng_unique_constraint_on_dashboard_slices_tbl.py | 2 +-
...5afa9079866a_serialize_schema_permissions_py.py | 2 +-
...e_form_strip_leading_and_trailing_whitespace.py | 2 +-
.../2019-10-10_13-52_1495eb914ad3_time_range.py | 4 +-
...127d0d1d_reconvert_legacy_filters_into_adhoc.py | 2 +-
..._14-13_3325d4caccc8_dashboard_scoped_filters.py | 2 +-
...10-42_f9a30386bd74_cleanup_time_grainularity.py | 2 +-
...29_09-24_620241d1153f_update_time_grain_sqla.py | 2 +-
...978245563a02_migrate_iframe_to_dash_markdown.py | 2 +-
...654_fix_data_access_permissions_for_virtual_.py | 2 +-
...b56500de1855_add_uuid_column_to_import_mixin.py | 4 +-
...208f_collapse_alerting_models_into_a_single_.py | 4 +-
...6e99fb176a0_add_import_mixing_to_saved_query.py | 4 +-
...e38177dbf641_security_converge_saved_queries.py | 4 +-
...15-25_40f16acf1ba7_security_converge_reports.py | 4 +-
...8ee129739cf9_security_converge_css_templates.py | 4 +-
..._14-13_ccb74baaa89b_security_converge_charts.py | 4 +-
...5-05_45731db65d9c_security_converge_datasets.py | 4 +-
...45_1f6dca87d1a2_security_converge_dashboards.py | 4 +-
...2_c25cb2c78727_security_converge_annotations.py | 4 +-
...-49_42b4c9e01447_security_converge_databases.py | 4 +-
...14_13-40_4b84f97828aa_security_converge_logs.py | 4 +-
...12-15_e37912a26567_security_converge_queries.py | 4 +-
...60bf0649a77_migrate_x_dateunit_in_time_range.py | 2 +-
...2fdb_add_granularity_to_charts_where_missing.py | 2 +-
...-10_12-32_41ce8799acc3_rename_pie_label_type.py | 4 +-
...1412ec1e5a7b_legacy_force_directed_to_echart.py | 4 +-
...8_09-13_c501b7c653a3_add_missing_uuid_column.py | 2 +-
...989bbe479899_rename_filter_configuration_in_.py | 4 +-
...ea61c5e7_remove_dataset_health_check_message.py | 2 +-
...88938_country_map_use_lowercase_country_name.py | 4 +-
...3a3a8ff221_migrate_filter_sets_to_new_format.py | 4 +-
...ed7ec95_migrate_native_filters_to_new_schema.py | 4 +-
...3605f370a_fix_schemas_allowed_for_csv_upload.py | 2 +-
...15da_migrate_pivot_table_v2_heatmaps_to_new_.py | 2 +-
..._17-16_f6196627326f_update_chart_permissions.py | 4 +-
...13dd52_change_fetch_values_predicate_to_text.py | 2 +-
...4fbb_add_type_to_native_filter_configuration.py | 4 +-
...453f4e2e_migrate_timeseries_limit_metric_to_.py | 2 +-
...12_11-15_32646df09c64_update_time_grain_sqla.py | 2 +-
...e5f1dacd_rename_to_schemas_allowed_for_file_.py | 4 +-
...aa3ff_add_force_screenshot_to_alerts_reports.py | 2 +-
...5b9441_rename_big_viz_total_form_data_fields.py | 4 +-
...d1d2_move_pivot_table_v2_legacy_order_by_to_.py | 4 +-
...d8e252_fix_query_and_saved_query_null_schema.py | 2 +-
...b0ca7944_change_adhoc_filter_b_from_none_to_.py | 4 +-
...14-38_a9422eeaae74_new_dataset_models_take_2.py | 2 +-
...d0249074e4_deprecate_time_range_endpoints_v2.py | 2 +-
...07e4fdbaba_rm_time_range_endpoints_from_qc_3.py | 2 +-
...-39_cbe71abde154_fix_report_schedule_and_log.py | 2 +-
...8_16-07_e786798587de_delete_none_permissions.py | 2 +-
..._16-17_f3afaf1f11f0_add_unique_name_desc_rls.py | 2 +-
...59_7fb8bca906d2_permalink_rename_filterstate.py | 4 +-
...5-48_409c7b420ab0_add_created_by_fk_as_owner.py | 2 +-
..._13-00_c747c78868b6_migrating_legacy_treemap.py | 4 +-
...-07_14-00_06e1e70058c7_migrating_legacy_area.py | 4 +-
...665d_fix_table_chart_conditional_formatting_.py | 2 +-
...1_4ce1d9b25135_remove_filter_bar_orientation.py | 2 +-
...4-46_c0a3ea245b61_remove_show_native_filters.py | 2 +-
...ac08bb5b83_invert_horizontal_bar_chart_order.py | 4 +-
...7_13-24_b5ea9d343307_bar_chart_stack_options.py | 4 +-
...03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py | 2 +-
...2a5681ddfd_convert_key_value_entries_to_json.py | 4 +-
...-41_4ea966691069_cross_filter_global_scoping.py | 4 +-
...02_9ba2ce3086e5_migrate_pivot_table_v1_to_v2.py | 4 +-
...-08_10-22_4c5da39be729_migrate_treemap_chart.py | 4 +-
...e58e1e58e5c_migrate_dual_line_to_mixed_chart.py | 4 +-
...delete_obsolete_druid_nosql_slice_parameters.py | 2 +-
...6f8b1280_cleanup_erroneous_parent_filter_ids.py | 2 +-
...9_17-54_ee179a490af9_deckgl_path_width_units.py | 2 +-
...23_0769ef90fddd_fix_schema_perm_for_datasets.py | 2 +-
...086c2676_add_normalize_columns_to_sqla_model.py | 2 +-
...317970b4400c_added_time_secondary_column_to_.py | 2 +-
...ff00fe8_add_percent_calculation_type_funnel_.py | 4 +-
...18_14-41_a32e0c4d8646_migrate_sunburst_chart.py | 4 +-
...d09c9_migrate_filter_boxes_to_native_filters.py | 2 +-
...d83218_migrate_can_view_and_drill_permission.py | 4 +-
...47_be1b217cd8cd_big_number_kpi_single_metric.py | 4 +-
...8_15-43_5ad7321c2169_mig_new_csv_upload_perm.py | 4 +-
...14-04_d60591c5515f_mig_new_excel_upload_perm.py | 4 +-
...36_4a33124c18ad_mig_new_columnar_upload_perm.py | 4 +-
...9123a_update_charts_with_old_time_comparison.py | 4 +-
...09-34_d482d51c15ca_remove_legacy_plugins_5_0.py | 4 +-
...-34_74ad1125881c_converge_upload_permissions.py | 4 +-
...fdba9f_merge_x_axis_sort_series_with_x_axis_.py | 4 +-
...2_convert_metric_currencies_from_str_to_json.py | 2 +-
...8d8526_fix_form_data_string_in_query_context.py | 2 +-
...00-00_ce6bd21901ab_migrate_deckgl_and_mapbox.py | 4 +-
...a1b2c3d4e5f6_add_granular_export_permissions.py | 4 +-
...-00_b4a3f2e1d0c9_fix_security_view_menu_case.py | 2 +-
...23_a7d3f1b9c2e4_cleanup_stale_can_import_pvm.py | 4 +-
...rip_metricsqlexpressions_from_ag_grid_params.py | 2 +-
...941d5352_restore_pivot_table_percent_display.py | 2 +-
...0-00_c4a1b8e2d739_databend_secure_to_sslmode.py | 2 +-
...da0e3f0081bf_enforce_oauth2_token_uniqueness.py | 97 ++
...de5ed955_merge_oauth2_token_uniqueness_with_.py | 23 +-
...0_39097d124752_add_reason_to_purge_audit_log.py | 60 +
superset/models/core.py | 6 +-
superset/models/helpers.py | 659 ++++++++-
superset/models/purge_audit_log.py | 6 +
superset/models/sql_lab.py | 2 +
superset/reports/filters.py | 30 +-
superset/reports/logs/api.py | 8 +
superset/reports/models.py | 4 +-
superset/reports/notifications/webhook.py | 140 +-
superset/security/api.py | 15 +
superset/security/api_key_scopes.py | 77 +
superset/security/manager.py | 601 +++++++-
superset/security/session_invalidation.py | 30 +-
superset/semantic_layers/api.py | 37 +
superset/semantic_layers/models.py | 54 +-
superset/sql/dialects/dremio.py | 28 +-
superset/sql/execution/executor.py | 42 +-
superset/sql/parse.py | 41 +-
superset/sqllab/schemas.py | 36 +-
superset/sqllab/utils.py | 1 +
superset/tags/api.py | 58 +
superset/tags/models.py | 2 +-
superset/tasks/async_queries.py | 7 +-
superset/tasks/context.py | 7 +-
superset/tasks/cron_util.py | 45 +
superset/tasks/decorators.py | 20 +-
superset/tasks/deletion_retention.py | 29 +-
superset/tasks/filters.py | 23 +-
superset/tasks/manager.py | 13 +-
superset/tasks/scheduler.py | 10 +-
superset/tasks/thumbnails.py | 3 +
superset/tasks/types.py | 7 +-
superset/tasks/utils.py | 95 +-
superset/templates/superset/spa.html | 7 +
superset/themes/api.py | 2 +
superset/thumbnails/digest.py | 13 +-
superset/translations/es/LC_MESSAGES/messages.po | 236 +--
superset/translations/messages.pot | 28 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 89 +-
superset/utils/core.py | 54 +-
superset/utils/date_parser.py | 24 +-
superset/utils/encrypt.py | 57 +-
superset/utils/excel.py | 32 +-
superset/utils/filters.py | 6 +-
superset/utils/link_redirect.py | 12 +-
superset/utils/network.py | 23 +-
superset/utils/pandas_postprocessing/__init__.py | 17 +
superset/utils/pandas_postprocessing/histogram.py | 21 +
superset/utils/pandas_postprocessing/prophet.py | 15 +
superset/utils/pandas_postprocessing/resample.py | 32 +
superset/utils/pandas_postprocessing/rolling.py | 15 +
superset/utils/pandas_postprocessing/utils.py | 6 +-
superset/utils/pandas_sqlalchemy_compat.py | 80 -
superset/utils/screenshot_utils.py | 111 +-
superset/utils/screenshots.py | 51 +-
superset/utils/webdriver.py | 48 +-
superset/versioning/changes/listener.py | 2 +
superset/versioning/changes/normalization.py | 300 ++++
superset/versioning/changes/state.py | 14 +
superset/views/custom_tags_api_mixin.py | 17 +-
superset/views/datasource/utils.py | 10 +-
superset/views/users/api.py | 38 +-
superset/views/users/schemas.py | 28 +-
tests/integration_tests/base_api_tests.py | 52 +
tests/integration_tests/charts/api_tests.py | 10 +-
.../integration_tests/charts/soft_delete_tests.py | 5 +-
tests/integration_tests/dao/conftest.py | 3 +-
tests/integration_tests/dashboards/api_tests.py | 266 +++-
tests/integration_tests/databases/api_tests.py | 46 +-
.../integration_tests/databases/commands_tests.py | 8 +-
tests/integration_tests/datasets/api_tests.py | 102 +-
tests/integration_tests/datasource/api_tests.py | 15 +
.../db_engine_specs/postgres_tests.py | 5 +-
.../deletion_retention/audit_tests.py | 248 +++-
.../deletion_retention/force_purge_tests.py | 1 +
.../deletion_retention/purge_tests.py | 118 +-
tests/integration_tests/fixtures/datasource.py | 4 +-
.../composite_pk_association_tables__tests.py | 2 +-
.../migrations/composite_pk_round_trip__tests.py | 4 +-
tests/integration_tests/model_tests.py | 8 +-
.../integration_tests/non_additive_totals_tests.py | 42 +
.../queries/saved_queries/api_tests.py | 3 +-
tests/integration_tests/query_context_tests.py | 52 +
tests/integration_tests/reports/alert_tests.py | 6 +-
tests/integration_tests/reports/utils.py | 11 +-
tests/integration_tests/sql_lab/commands_tests.py | 24 +
tests/integration_tests/sqla_models_tests.py | 149 ++
tests/integration_tests/tags/api_tests.py | 43 +
tests/integration_tests/tags/commands_tests.py | 50 +-
.../themes/test_theme_api_permissions.py | 34 +-
tests/integration_tests/utils/encrypt_tests.py | 12 +-
.../versioning/change_records_tests.py | 137 ++
.../charts/commands/importers/v1/import_test.py | 70 +
.../data/form_data_test.py} | 20 +-
.../charts/data/malformed_adhoc_metric_test.py | 217 +++
tests/unit_tests/charts/test_client_processing.py | 90 +-
tests/unit_tests/charts/test_filters.py | 2 +-
tests/unit_tests/charts/test_schemas.py | 81 +
.../commands/chart/delete_message_test.py | 63 +
.../chart/streaming_export_command_test.py | 36 +
tests/unit_tests/commands/databases/oauth2_test.py | 25 +
.../deletion_retention/test_reason_codes.py | 182 +++
.../importers/v1/import_saved_query_test.py | 126 ++
.../unit_tests/commands/importers/v1/utils_test.py | 151 ++
tests/unit_tests/commands/report/execute_test.py | 176 +++
.../commands/semantic_layer/create_test.py | 184 +++
.../commands/semantic_layer/delete_test.py | 199 ++-
.../commands/semantic_layer/update_test.py | 155 +-
.../commands/sql_lab/permalink_get_test.py | 87 ++
.../sql_lab/streaming_export_command_test.py | 19 +
tests/unit_tests/commands/sql_lab/test_execute.py | 161 ++
tests/unit_tests/commands/test_utils.py | 59 +
.../commands/theme/test_import_themes.py | 193 +++
.../common/test_form_data_query_context.py | 25 +
.../common/test_query_context_factory.py | 6 +-
.../common/test_query_context_processor.py | 49 +-
.../common/test_time_column_offset_repro.py | 204 +++
tests/unit_tests/common/test_time_shifts.py | 354 ++++-
tests/unit_tests/conftest.py | 4 +-
tests/unit_tests/connectors/sqla/models_test.py | 10 +-
tests/unit_tests/daos/test_report_dao.py | 57 +-
tests/unit_tests/daos/test_tasks.py | 11 +-
.../commands/importers/dispatcher_test.py | 36 +-
.../commands/importers/v1/import_command_test.py | 9 +-
tests/unit_tests/dashboards/filter_scope_test.py | 233 +++
tests/unit_tests/databases/api_test.py | 22 +
.../databases/commands/importers/v1/import_test.py | 240 +++
.../unit_tests/databases/error_provenance_test.py | 2 +-
tests/unit_tests/databases/filters_test.py | 6 +-
tests/unit_tests/databases/schema_tests.py | 38 +
tests/unit_tests/databases/test_schemas.py | 54 +
.../datasets/commands/importers/dispatcher_test.py | 38 +-
.../datasets/commands/importers/v1/import_test.py | 140 ++
tests/unit_tests/datasets/schema_tests.py | 45 +
tests/unit_tests/db_engine_specs/test_aurora.py | 37 +
tests/unit_tests/db_engine_specs/test_base.py | 47 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 37 +-
.../unit_tests/db_engine_specs/test_clickhouse.py | 151 +-
.../unit_tests/db_engine_specs/test_databricks.py | 17 +
tests/unit_tests/db_engine_specs/test_duckdb.py | 87 ++
.../test_extended_aggregations_unverified.py | 68 +
tests/unit_tests/db_engine_specs/test_gsheets.py | 37 +-
tests/unit_tests/db_engine_specs/test_hive.py | 23 +
tests/unit_tests/db_engine_specs/test_init.py | 87 ++
tests/unit_tests/db_engine_specs/test_mariadb.py | 35 +
tests/unit_tests/db_engine_specs/test_mssql.py | 11 +
tests/unit_tests/db_engine_specs/test_mysql.py | 142 +-
tests/unit_tests/db_engine_specs/test_ocient.py | 15 +-
tests/unit_tests/db_engine_specs/test_postgres.py | 323 ++++
tests/unit_tests/db_engine_specs/test_redshift.py | 30 +
tests/unit_tests/db_engine_specs/test_snowflake.py | 303 +++-
tests/unit_tests/db_engine_specs/test_sqlite.py | 4 +-
.../test_sybase.py} | 23 +-
.../unit_tests/db_engine_specs/test_timescaledb.py | 37 +
.../distributed_lock/distributed_lock_tests.py | 2 +-
tests/unit_tests/examples/utils_test.py | 20 +
tests/unit_tests/extensions/storage/test_api.py | 26 +
.../unit_tests/extensions/test_cache_middleware.py | 11 +
tests/unit_tests/extensions/test_sqlalchemy.py | 12 +-
.../frontend_bundle_size_workflow_test.py | 51 +
tests/unit_tests/jinja_context_test.py | 119 ++
.../tool/test_annotation_layer_tools.py | 55 +-
.../mcp_service/chart/test_big_number_chart.py | 1 +
.../mcp_service/chart/test_chart_schemas.py | 42 +-
.../mcp_service/chart/test_chart_utils.py | 144 ++
.../chart/test_dashboard_time_binding.py | 567 +++++++
.../mcp_service/chart/test_new_chart_types.py | 60 +
.../mcp_service/chart/tool/test_generate_chart.py | 153 +-
.../mcp_service/chart/tool/test_get_chart_data.py | 627 +++++++-
.../mcp_service/chart/tool/test_get_chart_info.py | 70 +-
.../chart/tool/test_get_chart_preview.py | 64 +-
.../mcp_service/chart/tool/test_get_chart_sql.py | 21 +-
.../chart/tool/test_get_chart_type_schema.py | 9 +-
.../mcp_service/chart/tool/test_list_charts.py | 40 +
.../mcp_service/chart/tool/test_restore_chart.py | 120 +-
.../mcp_service/chart/tool/test_update_chart.py | 171 ++-
.../chart/tool/test_update_chart_preview.py | 277 +++-
.../validation/test_column_name_normalization.py | 68 +
.../chart/validation/test_dataset_validator.py | 74 +
.../dashboard/test_dashboard_schemas.py | 39 +-
.../tool/test_add_chart_to_existing_dashboard.py | 21 +-
.../dashboard/tool/test_dashboard_tools.py | 69 +-
.../dashboard/tool/test_duplicate_dashboard.py | 15 +-
.../dashboard/tool/test_get_dashboard_datasets.py | 6 +-
.../dashboard/tool/test_get_dashboard_layout.py | 6 +-
.../tool/test_manage_dashboard_certification.py | 5 +-
.../dashboard/tool/test_manage_dashboard_owners.py | 18 +-
.../dashboard/tool/test_manage_native_filters.py | 33 +-
.../dashboard/tool/test_restore_dashboard.py | 121 +-
.../dashboard/tool/test_update_dashboard.py | 39 +
.../mcp_service/dataset/tool/test_dataset_tools.py | 165 ++-
.../mcp_service/dataset/tool/test_query_dataset.py | 68 +
.../dataset/tool/test_update_dataset_metric.py | 167 ++-
.../mcp_service/report/tool/test_report_tools.py | 38 +-
.../mcp_service/role/tool/test_role_tools.py | 30 +-
.../mcp_service/sql_lab/tool/test_execute_sql.py | 46 +
.../sql_lab/tool/test_open_sql_lab_with_context.py | 77 +-
.../sql_lab/tool/test_save_sql_query.py | 19 +-
.../mcp_service/system/tool/test_find_users.py | 65 +-
.../mcp_service/system/tool/test_get_schema.py | 39 +-
.../mcp_service/system/tool/test_mcp_core.py | 69 +-
.../mcp_service/tag/tool/test_tag_tools.py | 13 +-
.../mcp_service/task/tool/test_task_tools.py | 15 +-
tests/unit_tests/mcp_service/test_auth_rbac.py | 159 +-
.../mcp_service/test_auth_user_resolution.py | 100 +-
.../mcp_service/test_composite_token_verifier.py | 48 +-
.../mcp_service/test_guest_token_auth.py | 28 +-
.../unit_tests/mcp_service/test_main_entrypoint.py | 123 ++
tests/unit_tests/mcp_service/test_mcp_caching.py | 98 +-
tests/unit_tests/mcp_service/test_mcp_config.py | 78 +-
.../mcp_service/test_mcp_config_hs256_guard.py | 150 ++
tests/unit_tests/mcp_service/test_mcp_server.py | 112 ++
tests/unit_tests/mcp_service/test_middleware.py | 168 +++
.../mcp_service/test_middleware_logging.py | 103 ++
.../mcp_service/test_result_value_contract.py | 211 +++
tests/unit_tests/mcp_service/test_session_scope.py | 233 +++
.../mcp_service/theme/tool/test_create_theme.py | 16 +-
.../mcp_service/theme/tool/test_get_theme_info.py | 10 +-
tests/unit_tests/mcp_service/user/test_schemas.py | 12 +-
.../mcp_service/user/tool/test_user_tools.py | 42 +-
.../mcp_service/utils/test_sanitization.py | 335 +----
.../composite_pk_association_tables_test.py | 2 +-
.../test_add_deleted_at_to_dashboards.py | 2 +-
.../migrations/test_add_deleted_at_to_slices.py | 2 +-
.../migrations/test_add_deleted_at_to_tables.py | 2 +-
.../migrations/test_databend_secure_to_sslmode.py | 16 +-
.../test_enforce_oauth2_token_uniqueness.py | 173 +++
.../test_restore_pivot_table_percent_display.py | 8 +-
...rip_metricsqlexpressions_from_ag_grid_params.py | 8 +-
tests/unit_tests/models/core_test.py | 85 +-
tests/unit_tests/models/helpers_test.py | 73 +-
.../models/owner_association_tables_test.py | 2 +-
.../models/test_hours_offset_bound_truncation.py | 702 +++++++++
tests/unit_tests/models/test_multivalue_filter.py | 274 ++++
tests/unit_tests/models/test_multivalue_length.py | 130 ++
.../models/test_virtual_dataset_format.py | 58 +
tests/unit_tests/openapi/test_static_spec.py | 54 +
.../pandas_postprocessing/test_histogram.py | 25 +
.../pandas_postprocessing/test_prophet.py | 18 +
.../pandas_postprocessing/test_resample.py | 39 +
.../pandas_postprocessing/test_rolling.py | 17 +
.../unit_tests/pandas_postprocessing/test_utils.py | 24 +-
tests/unit_tests/queries/query_object_test.py | 266 ++++
tests/unit_tests/reports/filters_test.py | 66 +
tests/unit_tests/reports/logs_api_test.py | 37 +
.../reports/notifications/webhook_tests.py | 199 +++
tests/unit_tests/security/api_test.py | 33 +-
.../security/exclude_users_filter_test.py | 10 +-
tests/unit_tests/security/manager_test.py | 209 +++
tests/unit_tests/security/test_api_key_scopes.py | 251 ++++
.../test_password_change_session_invalidation.py | 276 ++++
.../test_superset_user_api_subject_sync.py | 229 +++
tests/unit_tests/semantic_layers/api_test.py | 161 ++
tests/unit_tests/semantic_layers/models_test.py | 111 ++
tests/unit_tests/sql/dialects/dremio_tests.py | 27 +
tests/unit_tests/sql/execution/test_executor.py | 177 +++
tests/unit_tests/sql/parse_tests.py | 90 +-
tests/unit_tests/sql_lab_test.py | 157 +-
tests/unit_tests/sqllab/test_schemas.py | 54 +
tests/unit_tests/sqllab/test_utils.py | 52 +
tests/unit_tests/subjects/test_filters.py | 27 +
tests/unit_tests/tags/api_test.py | 164 +++
tests/unit_tests/tags/commands/delete_test.py | 198 +++
tests/unit_tests/tags/commands/update_test.py | 152 ++
tests/unit_tests/tasks/test_cron_util.py | 56 +-
tests/unit_tests/tasks/test_filters.py | 44 +
tests/unit_tests/tasks/test_utils.py | 97 +-
tests/unit_tests/themes/commands_test.py | 51 +
tests/unit_tests/thumbnails/test_digest.py | 88 +-
tests/unit_tests/utils/date_parser_tests.py | 5 +
tests/unit_tests/utils/encrypt_test.py | 61 +
tests/unit_tests/utils/excel_tests.py | 44 +
tests/unit_tests/utils/filters_test.py | 49 +-
tests/unit_tests/utils/map_type_tests.py | 15 +
.../utils/pandas_sqlalchemy_compat_test.py | 67 -
tests/unit_tests/utils/screenshot_test.py | 107 ++
tests/unit_tests/utils/test_core.py | 18 +-
.../unit_tests/utils/test_encrypt_cbc_iv_reuse.py | 14 +-
tests/unit_tests/utils/test_link_redirect.py | 18 +
tests/unit_tests/utils/test_network.py | 35 +-
tests/unit_tests/utils/test_screenshot_utils.py | 18 +
tests/unit_tests/utils/webdriver_test.py | 182 +++
tests/unit_tests/versioning/test_listener.py | 5 +-
.../versioning/test_normalization_changes.py | 186 +++
tests/unit_tests/views/datasource/utils_test.py | 61 +
tests/unit_tests/views/test_current_user_api.py | 160 ++
.../unit_tests/views/test_custom_tags_api_mixin.py | 109 ++
tests/unit_tests/views/test_soft_delete_filter.py | 2 +-
970 files changed, 45289 insertions(+), 7946 deletions(-)
create mode 100644 .github/workflows/frontend-bundle-size-nightly.yml
create mode 100755 .github/workflows/scripts/check-docs-deploy-freshness.sh
create mode 100755 .github/workflows/scripts/check-docs-deploy-freshness.test.sh
create mode 100644 .github/workflows/superset-python-unittest-report.yml
create mode 100644 docs/admin_docs/configuration/dashboard-performance.mdx
create mode 100644 docs/docs/using-superset/mobile-experience.mdx
create mode 100644 docs/sip/median-stddev-variance-aggregates.md
create mode 100644 docs/static/img/screenshots/mobile/mobile_dashboard.jpg
create mode 100644 docs/static/img/screenshots/mobile/mobile_dashboard_list.jpg
create mode 100644 docs/static/img/screenshots/mobile/mobile_filter_drawer.jpg
create mode 100644 docs/static/img/screenshots/mobile/mobile_home.jpg
create mode 100644 docs/static/img/screenshots/mobile/mobile_nav_drawer.jpg
create mode 100644 docs/static/img/screenshots/mobile/mobile_unsupported.jpg
create mode 100644 helm/superset/tests/pdb_test.yaml
create mode 100755 scripts/docker-build-extra-flags.sh
create mode 100644 superset-core/tests/semantic_layers/test_types.py
create mode 100644 superset-embedded-sdk/src/index.test.ts
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/utils/getTotalsMetrics.test.ts
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/utils/getTotalsMetrics.ts
create mode 100644 superset-frontend/playwright/components/modals/DrillDetailModal.ts
create mode 100644 superset-frontend/playwright/generators/docs/mobile-screenshots.spec.ts
create mode 100644 superset-frontend/playwright/tests/dashboard/dashboard-drill-to-detail.spec.ts
create mode 100644 superset-frontend/playwright/tests/mobile/mobile-dashboard.spec.ts
create mode 100644 superset-frontend/playwright/tests/mobile/mobile-navigation.spec.ts
delete mode 100644 superset-frontend/playwright/tests/recently-archived/delete-modal.spec.ts
create mode 100644 superset-frontend/plugins/plugin-chart-ag-grid-table/test/NumericCellRenderer.test.tsx
create mode 100644 superset-frontend/plugins/plugin-chart-calendar/test/cal-heatmap.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-country-map/src/countries/italy_regions_and_autonomous_provinces.geojson
create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/countries.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/iran.geojson.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Bubble/transformProps.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/utils/xAxisDrillByFilter.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/BoxPlot/controlPanel.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/utils/xAxisDrillByFilter.test.ts
copy superset-frontend/{playwright/components/modals/index.ts => plugins/plugin-chart-parallel-coordinates/test/transformProps.test.ts} (56%)
create mode 100644 superset-frontend/scripts/bundle-size-summary.js
create mode 100644 superset-frontend/spec/helpers/mobileTestUtils.ts
create mode 100644 superset-frontend/spec/scripts/bundle-size-summary.test.js
create mode 100644 superset-frontend/spec/scripts/oxlint-metrics-uploader.test.js
create mode 100644 superset-frontend/src/components/Datasource/components/DatasourceEditor/tests/DatasourceEditorMetricCertification.test.tsx
create mode 100644 superset-frontend/src/components/Datasource/components/DatasourceEditor/tests/DatasourceEditorWarningMarkdown.test.tsx
create mode 100644 superset-frontend/src/components/Datasource/components/DatasourceEditor/tests/hydrateMetricExtra.test.ts
create mode 100644 superset-frontend/src/components/MobileRouteGuard/MobileRouteGuard.test.tsx
create mode 100644 superset-frontend/src/components/MobileRouteGuard/index.tsx
copy superset-frontend/{playwright/components/modals/index.ts => src/constants.test.ts} (58%)
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/transformers/customizationTransformer.test.ts
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/transformers/filterTransformer.test.ts
create mode 100644 superset-frontend/src/embedded/api.test.ts
create mode 100644 superset-frontend/src/features/apiKeys/apiKeyScopes.test.ts
create mode 100644 superset-frontend/src/features/apiKeys/apiKeyScopes.ts
create mode 100644 superset-frontend/src/features/charts/ChartCard.test.tsx
create mode 100644 superset-frontend/src/features/users/utils.test.ts
create mode 100644 superset-frontend/src/features/versionHistory/normalization.test.ts
create mode 100644 superset-frontend/src/features/versionHistory/normalization.ts
create mode 100644 superset-frontend/src/hooks/useIsMobile.ts
create mode 100644 superset-frontend/src/pages/Home/Home.mobile.test.tsx
create mode 100644 superset-frontend/src/pages/MobileUnsupported/MobileUnsupported.test.tsx
create mode 100644 superset-frontend/src/pages/MobileUnsupported/index.tsx
create mode 100644 superset-frontend/src/pages/SqlLab/LocationContext.test.tsx
create mode 100644 superset-frontend/tools/webpack.proxy-config.test.js
create mode 100644 superset/charts/data/form_data.py
create mode 100644 superset/dashboards/filter_scope.py
create mode 100644 superset/mcp_service/session_scope.py
create mode 100644 superset/migrations/versions/2026-08-07_09-00_da0e3f0081bf_enforce_oauth2_token_uniqueness.py
copy tests/unit_tests/sql/dialects/dremio_tests.py => superset/migrations/versions/2026-08-15_01-39_1072de5ed955_merge_oauth2_token_uniqueness_with_.py (65%)
create mode 100644 superset/migrations/versions/2026-08-24_12-00_39097d124752_add_reason_to_purge_audit_log.py
create mode 100644 superset/security/api_key_scopes.py
delete mode 100644 superset/utils/pandas_sqlalchemy_compat.py
create mode 100644 superset/versioning/changes/normalization.py
copy tests/unit_tests/{sql/dialects/dremio_tests.py => charts/data/form_data_test.py} (64%)
create mode 100644 tests/unit_tests/charts/data/malformed_adhoc_metric_test.py
create mode 100644 tests/unit_tests/commands/chart/delete_message_test.py
create mode 100644 tests/unit_tests/commands/deletion_retention/test_reason_codes.py
create mode 100644 tests/unit_tests/commands/importers/v1/import_saved_query_test.py
create mode 100644 tests/unit_tests/commands/sql_lab/permalink_get_test.py
create mode 100644 tests/unit_tests/commands/sql_lab/test_execute.py
create mode 100644 tests/unit_tests/commands/theme/test_import_themes.py
create mode 100755 tests/unit_tests/common/test_time_column_offset_repro.py
copy superset/migrations/versions/2022-07-07_14-00_06e1e70058c7_migrating_legacy_area.py => tests/unit_tests/dashboards/commands/importers/dispatcher_test.py (52%)
create mode 100644 tests/unit_tests/dashboards/filter_scope_test.py
copy superset/migrations/versions/2023-06-08_11-34_ae58e1e58e5c_migrate_dual_line_to_mixed_chart.py => tests/unit_tests/datasets/commands/importers/dispatcher_test.py (54%)
create mode 100644 tests/unit_tests/db_engine_specs/test_extended_aggregations_unverified.py
create mode 100644 tests/unit_tests/db_engine_specs/test_mariadb.py
copy tests/unit_tests/{sql/dialects/dremio_tests.py => db_engine_specs/test_sybase.py} (60%)
create mode 100644 tests/unit_tests/db_engine_specs/test_timescaledb.py
create mode 100644 tests/unit_tests/frontend_bundle_size_workflow_test.py
create mode 100644 tests/unit_tests/mcp_service/chart/test_dashboard_time_binding.py
create mode 100644 tests/unit_tests/mcp_service/chart/validation/test_dataset_validator.py
create mode 100644 tests/unit_tests/mcp_service/test_main_entrypoint.py
create mode 100644 tests/unit_tests/mcp_service/test_mcp_config_hs256_guard.py
create mode 100644 tests/unit_tests/mcp_service/test_result_value_contract.py
create mode 100644 tests/unit_tests/mcp_service/test_session_scope.py
create mode 100644 tests/unit_tests/migrations/test_enforce_oauth2_token_uniqueness.py
create mode 100644 tests/unit_tests/models/test_hours_offset_bound_truncation.py
create mode 100644 tests/unit_tests/models/test_multivalue_filter.py
create mode 100644 tests/unit_tests/models/test_multivalue_length.py
create mode 100644 tests/unit_tests/openapi/test_static_spec.py
create mode 100644 tests/unit_tests/reports/logs_api_test.py
create mode 100644 tests/unit_tests/security/test_api_key_scopes.py
create mode 100644 tests/unit_tests/security/test_password_change_session_invalidation.py
create mode 100644 tests/unit_tests/security/test_superset_user_api_subject_sync.py
create mode 100644 tests/unit_tests/sqllab/test_schemas.py
create mode 100644 tests/unit_tests/sqllab/test_utils.py
create mode 100644 tests/unit_tests/tags/api_test.py
create mode 100644 tests/unit_tests/tags/commands/delete_test.py
create mode 100644 tests/unit_tests/tasks/test_filters.py
delete mode 100644 tests/unit_tests/utils/pandas_sqlalchemy_compat_test.py
create mode 100644 tests/unit_tests/versioning/test_normalization_changes.py
create mode 100644 tests/unit_tests/views/test_current_user_api.py
create mode 100644 tests/unit_tests/views/test_custom_tags_api_mixin.py