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 2023/12/14 19:46:58 UTC

(superset) branch ts-conversions updated (a864960df1 -> bdfd194a35)

This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a change to branch ts-conversions
in repository https://gitbox.apache.org/repos/asf/superset.git


    omit a864960df1 adding types for npm packages
    omit 4d6e2e2d74 mainPreset to TS
     add e56e0de458 fix: revert fix(sqllab): Force trino client async execution (#24859) (#25541)
     add 003001f19f fix(sqllab): Allow opening of SQL Lab in new browser tab  (#25582)
     add a520124a78 fix(sqllab): Mistitled for new tab after rename (#25523)
     add 59fc5a6184 docs: BugHerd Tasks 88, 89, 90, 91 (#25567)
     add bfcca8cbab chore(helm): spelling: initialize (#25455)
     add 4a01b6006c build(deps-dev): bump @types/node from 20.8.4 to 20.8.5 in /superset-websocket (#25632)
     add b370c66308 fix(sqllab): template validation error within comments (#25626)
     add 9074f72959 fix(tags): Polish + Better messaging for skipped tags with bad permissions (#25578)
     add 5054b9fade build(ci): Provide diff for pre-commit failures (#25638)
     add e8783033f8 chore: adding resource links to readme (#25629)
     add 56f74e5215 docs: invert logo color for dark theme in README (#25537)
     add 99f79f5143 fix: avoid 500 errors with SQLLAB_BACKEND_PERSISTENCE (#25553)
     add 8c6bd4ef04 chore: bump pip-tools (#25645)
     add a0a0d8043f fix(import): Make sure query context is overwritten for overwriting imports (#25493)
     add 18a1c8d7d8 build(deps-dev): bump @types/node from 20.8.5 to 20.8.6 in /superset-websocket (#25653)
     add e58a3aba54 fix: permalink save/overwrites in explore (#25112)
     add 51c56dd2a0 fix(header navlinks): link navlinks to path prefix (#25495)
     add 1991d240bf build(deps-dev): bump @babel/traverse from 7.16.0 to 7.23.2 in /superset-websocket (#25661)
     add cb963585ad chore: sync lock files (#25667)
     add f473d13d0d fix: improve upload ZIP file validation (#25658)
     add 150e5c90f7 docs: make project-specific security page more prominent (#25654)
     add deef3b04eb feat(sqllab): ResultTable extension (#25423)
     add 16cc089b19 fix: warning of nth-child (#23638)
     add 32e37d8cda chore: Cleanup hostNamesConfig.js (#25543)
     add a27a809f07 fix(tags): +n tags for listview (#25603)
     add 8b32b2abd3 build(deps-dev): bump @types/jsonwebtoken from 9.0.3 to 9.0.4 in /superset-websocket (#25688)
     add dc06fb8b11 chore: Adds 3.0.1 data to CHANGELOG.md (#25691)
     add be82657940 fix(dremio): Fixes issue with Dremio SQL generation for Charts with Series Limit (#25657)
     add 26498fc099 chore: add latest-official docker tag (#25322)
     add e7cdfeeb2c feat: Add week time grain for Elasticsearch datasets (#25683)
     add 4e94fc4cff fix(sqllab): reinstate "Force trino client async execution" (#25680)
     add 1d37f3a15b build(deps-dev): bump @types/node from 20.8.6 to 20.8.7 in /superset-websocket (#25700)
     add bac5a85541 docs(README): remove typo (#25710)
     add e29e2684d0 build(deps-dev): bump @types/uuid from 9.0.4 to 9.0.6 in /superset-websocket (#25701)
     add 07796b7528 build(deps-dev): bump @types/cookie from 0.5.1 to 0.5.3 in /superset-websocket (#25689)
     add da42bf2dbb fix: remove unnecessary redirect (#25679)
     add dfff3c1cba feat: Funnel/tooltip-customization (#25666)
     add 39ad3226c7 feat: add database and schema names to dataset option (#25569)
     add 505678b37b chore: Change the format for sha512 sum for releases (#25577)
     add def7cd1b89 chore: helm chart: bump appVersion to 3.0.1 (#25709)
     add ee23690196 feat: add France's regions to country map visualization (#25676)
     add 75a7431379 fix(chore): dashboard requests to database equal the number of slices it has (#24709)
     add 8fb0c8da56 fix: bump to FAB 4.3.9 remove CSP exception (#25712)
     add 9972ac6908 refactor: use DATE_TRUNC for Elasticsearch time grain (#25717)
     add 4ac8f826f2 fix(driver): bumping DuckDB to 0.9.2 (#25718)
     add ed87470bcc fix(metadb): handle durations (#25727)
     add 4aef771072 chore: updated base DAO find_by_id to return generic type (#25726)
     add cbbf2bed6e build(deps-dev): bump eslint from 8.51.0 to 8.52.0 in /superset-websocket (#25735)
     add e4173d90c8 fix(horizontal filter label): show full tooltip with ellipsis (#25732)
     add 861ee8b3c6 chore(websocket): [WIP] Making JWT algos configurable (#25521)
     add 419d122816 chore: bump pymssql version (#25737)
     add 27a06f57e1 style(readme): reformatted  (#25721)
     add e2fe967788 fix: Revert "fix(Charts): Set max row limit + removed the option to use an empty row limit value" (#25753)
     add cee8532733 fix(README): mismatched picture tags (#25739)
     add c7f8d11a7e fix: dataset update uniqueness (#25756)
     add 2a2bc82a8b fix(sqllab): slow pop datasource query (#25741)
     add bda43ac0f6 chore: Add config options for Playwright wait_until and default timeout (#25765)
     add ed14f36c55 fix: allow for backward compatible errors (#25640)
     add 5659c87ed2 fix: DB-specific quoting in Jinja macro (#25779)
     add 74dbada473 feat(Export as PDF - rasterized): Adding rasterized pdf functionality to dashboard (#25696)
     add 0f01d9b08f feat(helm): Add option to deploy extra containers to init job (#25783)
     add 5e6d05b3fd fix(helm): Fix init extra containers (#25803)
     add ae703b48fc fix: Revert "fix: Apply normalization to all dttm columns (#25147)" (#25801)
     add 7804d1451e chore(security): Make get_database_perm/get_dataset_perm return optional (#24046)
     add 8737a8a546 fix: Resolve issue #24195 (#25804)
     add d2f511abba feat: support server-side sessions (#25795)
     add 1eba7121aa fix(SQL field in edit dataset modal): display full sql query (#25768)
     add 2177a50c7a build(deps): bump browserify-sign from 4.2.1 to 4.2.2 in /superset-frontend (#25778)
     add 1e37f0b417 chore(celery): Cleanup config and async query specifications (#25314)
     add 3f28eebb20 fix(sqllab): infinite fetching status after results are landed (#25814)
     add e1eb985aa8 docs: Add Cyberhaven to Users list (#25530)
     add f265b2c1ae build(deps-dev): bump @types/node from 20.8.7 to 20.8.10 in /superset-websocket (#25816)
     add a249e418b3 chore(issues): config.yaml added with feature request link to open a discussion (#25823)
     add a3686459a9 chore: Update sip.md to have a better call to action (#25822)
     add 6ace22da87 chore(websocket): Adding support for redis username in websocket server (#25826)
     add aaf7d6b7e4 chore: Removes border of the color picker control (#25812)
     add b58cc24bd4 chore(docker-compose): more host network specifiers (#25817)
     add 5690946b1a feat: support databend for superset (#23308)
     add 508721bd97 docs: Update location of `async_query_manager.py` (#25531)
     add c3f3ec56d6 fix: databend png pic (#25851)
     add ff8bc3c426 chore: Updates Databend image extension reference in README.md (#25852)
     add 8061d5cce9 fix: Fires onChange when clearing all values of single select (#25853)
     add d619078d25 feat: Improves the Waterfall chart (#25557)
     add 24a2213445 feat(sqllab): Format sql (#25344)
     add ae619b169c fix: the temporal x-axis results in a none time_range. (#25429)
     add 60e1526f6a fix: remove `update_charts_owners` (#25843)
     add 80cf710dbe fix: add validation on tag name to have name + onDelete refresh list view (#25831)
     add 916f7bcbba fix(table chart): Show Cell Bars correctly #25625 (#25707)
     add fb35bac070 feat(sqllab): Dynamic query limit dropdown (#25855)
     add 30cd422331 fix(tagging): change key from name to id for tagToSelectOption (#25856)
     add 7536dd12cd fix(charts): Time grain is None when dataset uses Jinja (#25842)
     add 887be5dd32 build(deps-dev): bump eslint from 8.52.0 to 8.53.0 in /superset-websocket (#25867)
     add 268c1dcdad fix: Saving Mixed Chart with dashboard filter applied breaks adhoc_filter_b (#25877)
     add 5e5a9c601f fix(typo): replace 'datasouce_id' with 'datasource_id' in openapi.json (#25875)
     add d6fde3cdd5 chore: Update INTHEWILD.md (#25714)
     add 3ee22667a7 build(deps): bump cookie from 0.5.0 to 0.6.0 in /superset-websocket (#25886)
     add 80caba3fd1 feat: method for dynamic `allows_alias_in_select` (#25882)
     add 1d0b86ae94 chore: add more migration tests (#25262)
     add 06ffcd29e2 fix: database version field (#25898)
     add cdb18e04ff fix: trino cursor (#25897)
     add a97bf6494e build(deps-dev): bump @types/cookie from 0.5.3 to 0.5.4 in /superset-websocket (#25905)
     add 4402f5c5cd build(deps-dev): bump @types/ws from 8.5.7 to 8.5.9 in /superset-websocket (#25906)
     add 6f92007a85 build(deps): bump @types/lodash from 4.14.200 to 4.14.201 in /superset-websocket (#25907)
     add b0da5cef70 chore: remove deprecated functions in SQLAlchemy (#25911)
     add 458be8c848 fix(trino): allow impersonate_user flag to be imported (#25872)
     add 784a478268 fix(table): Double percenting ad-hoc percentage metrics (#25857)
     add e03691917b chore: remove unused functions in utils/core (#25912)
     add 90e210892b chore: Simplify utils/cache by using default argument values (#25900)
     add 2bd611916d feat: safer insert RLS (#20323)
     add a698587e8c docs: Remove Python 3.8 from CONTRIBUTING.md (#25885)
     add 10205d0b50 chore: Singularize tag models (#25819)
     add 581d3c7108 fix(sqllab): invalid sanitization on comparison symbol (#25903)
     add 33d8078a83 build(deps-dev): bump @types/node from 20.8.10 to 20.9.0 in /superset-websocket (#25928)
     add 83b7fa92af feat: Adds Line chart migration logic (#23973)
     add b6fb36f22b chore: removing unused chartMetadata field (#25926)
     add 84a894c2c7 chore(issue template): attempting to fix two entries/links (#25881)
     add 478ca904ae build(deps): bump axios from 1.4.0 to 1.6.1 in /superset-frontend (#25951)
     add d95c200e69 fix: update flask-caching to avoid breaking redis cache, solves #25339 (#25947)
     add b430b5a172 chore: Simplify views/base (#25948)
     add c3249dd97d test: Reduce flaky integration tests triggered by `test_get_tag` (#25958)
     add 3bff1a00b6 build(deps-dev): bump @types/uuid from 9.0.6 to 9.0.7 in /superset-websocket (#25929)
     add 943696a87f build(deps-dev): bump @types/jsonwebtoken from 9.0.4 to 9.0.5 in /superset-websocket (#25927)
     add 8d8e1bb637 fix: always denorm column value before querying values (#25919)
     add 6d8424c104 chore(colors): Updating Airbnb brand colors (#23619)
     add 99d4f8931a build(deps-dev): bump axios from 0.25.0 to 1.6.0 in /superset-embedded-sdk (#25953)
     add 5def416f63 fix: naming denomalized to denormalized in helpers.py (#25973)
     add 007d22199d chore: support different JWT CSRF cookie names (#25891)
     add 6b7761ecf2 chore: Add entry point for SliceHeader frontend extension (#25968)
     add f6ba75a185 feat(explore): dataset macro: dttm filter context (#25950)
     add f18fb24b3d fix(sqllab): Allow router navigation to explore (#25941)
     add 5e1c4057a0 fix(helm): Restart all related deployments when bootstrap script changed (#25703)
     add f22ae2dc51 docs: add Tentacle to users list (#25059)
     add 63b8172321 style: Transition of Navbar from dark to light and vice-versa is now smooth (#24485)
     add aee94b39ba fix(tag): update state to clear form on success (#25934)
     add d20b60edd4 chore: Remove more redundant code in utils/core (#25986)
     add 7f0c3b20ad docs: handling "System limit for number of file watchers reached" error (#25551)
     add 97d89d7340 feat: Adds Area chart migration logic (#25952)
     add 210f1f8f95 fix(rls): Update text from tables to datasets in RLS modal (#25997)
     add 5fccf67cdc fix: Make Select component fire onChange listener when a selection is pasted in (#25993)
     add e7a1876807 fix(explore): redandant force param (#25985)
     add 326ac4a6c4 chore: Optimize fetching samples logic (#25995)
     add bece2ea3e4 chore: Remove unnecessary autoflush from tagging and key/value workflows (#26009)
     add 5942d8bf68 build(deps-dev): bump @types/node from 20.9.0 to 20.9.1 in /superset-websocket (#26012)
     add 2499a1cf5a chore: cleanup unused code in pandas 2.0+ (#26013)
     add 411dba240b build(deps-dev): bump eslint from 8.53.0 to 8.54.0 in /superset-websocket (#26025)
     add 8d73ab9955 feat(sqllab): TRINO_EXPAND_ROWS: expand columns from ROWs (#25809)
     add 92ac6b2c15 feat(sqllab): Show duration as separate column in Query History view (#25861)
     add e1d73d5420 fix(native filters): rendering performance improvement by reduce overrendering (#25901)
     add 628cd345f2 fix: update FAB to 4.3.10, Azure user info fix (#26037)
     add e2bfb1216b feat(sqllab): non-blocking persistence mode (#24539)
     add e7797b65d1 fix(horizontal filter bar filter labels): Increase max-width to 96px (#25883)
     add dd58b31cc4 chore(sqlalchemy): Remove erroneous SQLAlchemy ORM session.merge operations (#24776)
     add bba7763825 fix(security): restore default value of SESSION_COOKIE_SECURE to False (#26005)
     add 1af5fbbd6a docs(BH#109): Athena URI spec fix  (#26044)
     add b5e7e707b3 chore: Allow external extensions to include their own package.json files (#26004)
     add fbc66a8177 chore: bump shillelagh (#26043)
     add f99c874962 feat(metadb): handle decimals (#25921)
     add adb86d35ec build(deps-dev): bump @types/ws from 8.5.9 to 8.5.10 in /superset-websocket (#26048)
     add 9452664079 build(deps-dev): bump @types/node from 20.9.1 to 20.9.3 in /superset-websocket (#26049)
     add 25a737e83c fix: Remove annotation Fuzzy to get french translation (#26010)
     add f934278fef docs(intro): fix a single broken link (BugHerd #97) (#26039)
     add 68e5e1afea feat: Add Bubble chart migration logic (#26033)
     add 07551dc3d4 chore(connector): Cleanup base models and views according to SIP-92 (#24773)
     add 97121465dd feat: Add Apache Doris support (#24714)
     add bd8951e958 fix: Optimize fetching samples logic (#26060)
     add 630734b908 fix: Prevent cached bootstrap data from leaking between users w/ same first/last name (#26023)
     add 260d561b9a docs: update security policy and contributing (#25917)
     add 843c7ab58a chore: Allow only iterables for BaseDAO.delete() (#25844)
     add 2b88225ee1 fix: Flaky test_explore_json_async test (#26059)
     add 6359086779 fix: move driver import to method (#26066)
     add fef82789b1 build(deps): bump @types/lodash from 4.14.201 to 4.14.202 in /superset-websocket (#26063)
     add b1f521263d build(deps-dev): bump @types/node from 20.9.3 to 20.9.4 in /superset-websocket (#26064)
     add 984c278c4c chore: Updates Announce template to include CHANGELOG.md and UPDATING.md files (#26073)
     add 07bcfa9b5f chore(command): Organize Commands according to SIP-92 (#25850)
     add 57d61df44d chore: Adds 3.0.2 data to CHANGELOG.md (#26075)
     add aad67e43db fix(plugin-chart-echarts): support numerical x-axis (#26087)
     add 4fc2758e6a fix: bump node-fetch to 2.6.7 (#26091)
     add d20f96f8d0 docs(databases): Update pinot.mdx to incorporate username and password based connection. (#26000)
     add 91a8b69d36 fix: flaky test_explore_json_async test v2 (#26106)
     add 849ca64ba8 chore: Adds the 3.1.0 Release Notes (#26058)
     add 6447529ee4 docs: update CVEs fixed on 2.1.2 (#26104)
     add f3b0706507 build(deps-dev): bump @types/cookie from 0.5.4 to 0.6.0 in /superset-websocket (#26099)
     add 9a13ec6d5f build(deps-dev): bump @types/node from 20.9.4 to 20.10.0 in /superset-websocket (#26100)
     add 0d2e85517c docs: Update Trino Kerberos configuration (#26119)
     add 7223633da6 fix: alias column when fetching values (#26120)
     add af58784040 feat(deckgl-map): use an arbitraty Mabpox style URL (#26027) (#26031)
     add b9aaf0fc05 docs: add Onebeat to users list (#26112)
     add a27a0df1a4 chore(deps): bump pillow deps (#25931)
     add ea1a96e8e1 docs: add Increff to users list (#26124)
     add 6a5a765689 fix: remove default secret key from helm (#23916)
     add ee308fbc64 chore(tags): Allow for lookup via ids vs. name in the API (#25996)
     add f1a6b2f852 docs(drivers): refresh guide on adding a db driver in docker (#26038)
     add d00c17dde2 chore: Rename SET_ACTIVE_TABS action, add a new action (#26147)
     add 79be126189 docs: update CVEs fixed on 3.0.0 (#26149)
     add cff473f825 fix(annotations): time grain column (#26140)
     add df0f663382 build(deps-dev): bump @types/node from 20.10.0 to 20.10.1 in /superset-websocket (#26143)
     add 4f00404805 feat(helm): Add option to deploy extra containers to remaining deployments (#26123)
     add f405ba033e feat: Adds legacy time support for Waterfall chart (#26136)
     add b2ea97a984 fix: set label on adhoc column should persist (#26154)
     add 1b9e4ff9ab docs: add quickstart (#26129)
     add c033ca959d fix(database-import): Support importing a DB connection with a version set (#26116)
     add cdbbd83705 fix(sqllab): table preview has gone (#25977)
     add b7a9c220e1 fix(Alerts/Reports): allow use of ";" separator in slack recipient entry (#25894)
     add 8644b1a319 fix: Migration order due to cherry which went astray (#26160)
     add fccde379b8 build(deps-dev): bump @types/node from 20.10.1 to 20.10.3 in /superset-websocket (#26167)
     add 248586de6e build(deps-dev): bump eslint-config-prettier from 9.0.0 to 9.1.0 in /superset-websocket (#26166)
     add 3ab27c6ec9 chore: Clean up the examples dashboards (#26158)
     add 0b477e3f7c chore: harmonize and clean up list views (#25961)
     add 86304ab171 fix(menu): Styling active menu in SPA navigation (#25533)
     add b287ca7f5b feat: Create db_engine_spec ibmi.py (#26161)
     add 386d4e0541 fix(embedded): Hide sensitive payload data from guest users (#25878)
     add 56fa2b29d3 docs: update CHANGELOG for 2.1.2 (#26150)
     add d2cce51ddf build(deps-dev): bump eslint from 8.54.0 to 8.55.0 in /superset-websocket (#26174)
     add 4d4b19e8ba fix(init-job): Fix envFrom for init job in helm chart (#26157)
     add c8e69e2f9d feat(docker): Add ARM builds (#26196)
     add bf5b18ccb1 chore: Lower giveup log level for retried functions to warning (#26188)
     add f68dd8293f fix(docker): Remove race condition when building image (#26205)
     add 39c6488463 fix: Includes 90° x-axis label rotation (#26207)
     add f30f685eb5 fix(sqllab): flaky json explore modal due to over-rendering (#26156)
     add 3a04ac7720 build(deps-dev): bump @types/node from 20.10.3 to 20.10.4 in /superset-websocket (#26204)
     add b4a35e624b chore: Adds note about numerical x-axis (#26208)
     add 88fb342887 fix(dashboard): use textContent to render hidden title (#26189)
     add d2adc858cb fix: support custom links in markdown (#26211)
     add 05d7060d83 fix(chart-filter): Avoid column denormalization if not enabled (#26199)
     add 07e5fe8a66 fix(plugin-chart-echarts): support truncated numeric x-axis (#26215)
     add dbed64a2c6 fix: Use page.locator in Playwright reports (#26224)
     add 005cf5947b chore: Moves xAxisLabelRotation to shared controls (#26212)
     add fca5b829df chore: lock the databend-sqlalchemy version (#26082)
     add 2ac28927a3 fix: bump pyarrow constraints (CVE-2023-47248) (#26187)
     add 577565cd82 build(deps-dev): bump ts-node from 10.9.1 to 10.9.2 in /superset-websocket (#26233)
     add 1fbc762efa build(deps): bump ws from 8.14.2 to 8.15.0 in /superset-websocket (#26234)
     add 136ad0ef4f chore: add class component tasklist file (#26078)
     add 5df544b6fb fix(plugin-chart-echarts): undefined bounds for bubble chart (#26243)
     add 3a6fe9f105 chore(tests): Add tests to the column denormalization flow (#26220)
     add 46e677823e chore: adding 'no-experimental-fetch' node option by default (#25628)
     add 578a899152 chore: improve CSP add base uri restriction (#26251)
     add 334e15997f chore(async queries): sending statsd event for async events API call (#26259)
     add 429e2a33c3 fix: Stacked charts with numerical columns (#26264)
     add 67468c46c0 fix(plugin-chart-echarts): use scale for truncating x-axis (#26269)
     add 8437a235c9 feat(telemetry): Adding Scarf based telemetry to Superset (#26011)
     add bdfd194a35 mainPreset to TS

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (a864960df1)
            \
             N -- N -- N   refs/heads/ts-conversions (bdfd194a35)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

No new revisions were added by this update.

Summary of changes:
 .github/ISSUE_TEMPLATE/config.yml                  |  12 +
 .github/ISSUE_TEMPLATE/sip.md                      |   4 +-
 .github/SECURITY.md                                |   4 +-
 .github/workflows/docker-release.yml               |   3 +-
 .github/workflows/docker.yml                       |   2 +-
 .github/workflows/superset-python-misc.yml         |   7 +-
 CHANGELOG.md                                       | 119 ++++
 CONTRIBUTING.md                                    |  70 +-
 Dockerfile                                         |  14 +-
 README.md                                          |  30 +-
 RELEASING/README.md                                |   1 +
 RELEASING/email_templates/announce.j2              |   6 +
 RELEASING/release-notes-3-1/README.md              | 166 +++++
 RELEASING/release-notes-3-1/media/bubble_chart.png | Bin 0 -> 430546 bytes
 RELEASING/release-notes-3-1/media/contour.png      | Bin 0 -> 1035330 bytes
 RELEASING/release-notes-3-1/media/databend.png     | Bin 0 -> 7318 bytes
 .../release-notes-3-1/media/dataset_selector.png   | Bin 0 -> 420784 bytes
 RELEASING/release-notes-3-1/media/doris.png        | Bin 0 -> 17856 bytes
 RELEASING/release-notes-3-1/media/france.png       | Bin 0 -> 107828 bytes
 RELEASING/release-notes-3-1/media/kazakhstan.png   | Bin 0 -> 263828 bytes
 .../release-notes-3-1/media/keyboard_shortcuts.png | Bin 0 -> 305917 bytes
 RELEASING/release-notes-3-1/media/kyrgyzstan.png   | Bin 0 -> 183302 bytes
 .../release-notes-3-1/media/sql_formatting.png     | Bin 0 -> 473810 bytes
 RELEASING/release-notes-3-1/media/tajikistan.png   | Bin 0 -> 204499 bytes
 RELEASING/release-notes-3-1/media/turkmenistan.png | Bin 0 -> 178477 bytes
 RELEASING/release-notes-3-1/media/uzbekistan.png   | Bin 0 -> 160917 bytes
 .../release-notes-3-1/media/waterfall_chart.png    | Bin 0 -> 326362 bytes
 RESOURCES/INTHEWILD.md                             |   5 +
 UPDATING.md                                        |   1 +
 docker-compose.yml                                 |   8 +
 docs/docs/api.mdx                                  |   2 +-
 docs/docs/contributing/_category_.json             |   2 +-
 docs/docs/databases/_category_.json                |   2 +-
 docs/docs/databases/databend.mdx                   |  23 +
 docs/docs/databases/docker-add-drivers.mdx         |  72 +-
 docs/docs/databases/doris.mdx                      |  26 +
 .../docs/databases/installing-database-drivers.mdx |  83 +--
 docs/docs/databases/pinot.mdx                      |   6 +
 docs/docs/databases/trino.mdx                      |   2 +
 docs/docs/frequently-asked-questions.mdx           |  10 +-
 docs/docs/installation/_category_.json             |   2 +-
 docs/docs/installation/alerts-reports.mdx          |  31 +-
 docs/docs/installation/async-queries-celery.mdx    |  25 +-
 docs/docs/installation/cache.mdx                   |   5 +-
 docs/docs/installation/configuring-superset.mdx    |  51 +-
 .../installing-superset-from-scratch.mdx           |   6 +-
 .../installing-superset-using-docker-compose.mdx   |   4 +-
 docs/docs/installation/running-on-kubernetes.mdx   |  40 +-
 docs/docs/intro.mdx                                |   2 +-
 docs/docs/miscellaneous/_category_.json            |   2 +-
 docs/docs/quickstart.mdx                           |  86 +++
 docs/docs/security/_category_.json                 |   2 +-
 docs/docs/security/cves.mdx                        |  20 +-
 docs/docs/security/security.mdx                    |  51 +-
 docs/docusaurus.config.js                          |   2 +-
 docs/src/resources/data.js                         |   5 +
 docs/src/styles/main.less                          |   1 +
 docs/static/img/databases/doris.png                | Bin 0 -> 11539 bytes
 docs/static/resources/openapi.json                 |   8 +-
 helm/superset/Chart.yaml                           |   4 +-
 helm/superset/README.md                            |  14 +-
 helm/superset/README.md.gotmpl                     |   6 +
 helm/superset/templates/_helpers.tpl               |  14 +-
 helm/superset/templates/deployment-beat.yaml       |   4 +
 helm/superset/templates/deployment-flower.yaml     |   3 +
 helm/superset/templates/deployment-worker.yaml     |   1 +
 helm/superset/templates/deployment-ws.yaml         |   3 +
 helm/superset/templates/init-job.yaml              |   5 +-
 helm/superset/values.yaml                          |  12 +-
 pytest.ini                                         |   2 +-
 requirements/base.txt                              |  39 +-
 requirements/development.txt                       |   7 -
 requirements/integration.txt                       |   3 +-
 requirements/testing.txt                           |  11 +-
 .../workflows => scripts}/docker_build_push.sh     |  58 +-
 .../generate_frontend_class_component_tasklist.js  |  73 ++
 scripts/sign.sh                                    |   3 +-
 scripts/tag_latest_release.sh                      | 140 ++--
 setup.py                                           |  22 +-
 superset-embedded-sdk/package-lock.json            |  73 +-
 superset-embedded-sdk/package.json                 |   2 +-
 .../cypress/e2e/alerts_and_reports/alerts.test.ts  |   7 +-
 .../cypress/e2e/alerts_and_reports/reports.test.ts |   7 +-
 .../cypress/e2e/chart_list/filter.test.ts          |  16 +-
 .../cypress/e2e/chart_list/list.test.ts            |  10 +-
 .../cypress/e2e/dashboard/editmode.test.ts         |   6 +-
 .../cypress/e2e/dashboard/nativeFilters.test.ts    |   6 +-
 .../cypress/e2e/dashboard/tabs.test.ts             |   3 -
 .../cypress-base/cypress/e2e/dashboard/utils.ts    |   1 -
 .../cypress/e2e/dashboard_list/filter.test.ts      |   6 +-
 .../cypress/e2e/dashboard_list/list.test.ts        |  12 +-
 .../e2e/explore/visualizations/dist_bar.test.js    |   2 +-
 .../e2e/explore/visualizations/line.test.ts        |   2 +-
 .../cypress-base/cypress/support/e2e.ts            |   2 +-
 superset-frontend/lerna.json                       |   2 +-
 superset-frontend/package-lock.json                | 559 +++++++++++----
 superset-frontend/package.json                     |  11 +-
 .../src/shared-controls/sharedControls.tsx         |   9 +-
 .../packages/superset-ui-core/src/chart/index.ts   |   2 +-
 .../src/chart/models/ChartMetadata.ts              |   5 -
 .../superset-ui-core/src/chart/types/Base.ts       |   1 -
 .../src/color/colorSchemes/categorical/airbnb.ts   |  34 +-
 .../packages/superset-ui-core/src/color/index.ts   |   1 +
 .../packages/superset-ui-core/src/color/types.ts   |   7 +
 .../packages/superset-ui-core/src/color/utils.ts   |  33 +
 .../src/components/SafeMarkdown.tsx                |   1 +
 .../src/query/normalizeTimeColumn.ts               |   5 +-
 .../superset-ui-core/src/ui-overrides/types.ts     |  19 +
 .../superset-ui-core/src/utils/html.test.tsx       |   3 +
 .../packages/superset-ui-core/src/utils/html.tsx   |   4 +-
 .../superset-ui-core/src/validator/index.ts        |   2 +-
 .../src/validator/validateMapboxStylesUrl.ts}      |  28 +-
 .../src/validator/validateMaxValue.ts              |   8 -
 .../superset-ui-core/test/color/utils.test.ts      |  26 +-
 .../test/query/normalizeTimeColumn.test.ts         |   8 +-
 ...lue.test.ts => validateMapboxStylesUrl.test.ts} |  41 +-
 .../legacy-plugin-chart-map-box/Stories.tsx        |   2 +-
 .../src/countries.ts                               |   5 +
 .../src/countries/france_regions.geojson           |  20 +
 .../src/controlPanel.ts                            |  14 +-
 .../src/ReactParallelCoordinates.jsx               |   2 +-
 .../src/Multi/controlPanel.ts                      |   3 +-
 .../src/layers/Arc/controlPanel.ts                 |   5 +-
 .../src/layers/Contour/controlPanel.ts             |   4 +-
 .../src/layers/Grid/controlPanel.ts                |   3 +-
 .../src/layers/Heatmap/controlPanel.ts             |   3 +-
 .../src/layers/Hex/controlPanel.ts                 |   4 +-
 .../src/layers/Path/controlPanel.ts                |   3 +-
 .../src/layers/Scatter/controlPanel.ts             |   5 +-
 .../src/layers/Screengrid/controlPanel.ts          |   5 +-
 .../src/utilities/Shared_DeckGL.jsx                |   8 +-
 .../legacy-preset-chart-nvd3/src/ReactNVD3.jsx     |   2 +-
 .../plugin-chart-echarts/src/Bubble/constants.ts   |   5 +-
 .../src/Bubble/controlPanel.tsx                    |  36 +-
 .../src/Bubble/transformProps.ts                   |  28 +-
 .../src/Funnel/controlPanel.tsx                    |  45 +-
 .../src/Funnel/transformProps.ts                   |   9 +-
 .../plugin-chart-echarts/src/Funnel/types.ts       |   3 +
 .../src/MixedTimeseries/controlPanel.tsx           |  32 +-
 .../src/MixedTimeseries/transformProps.ts          |  66 +-
 .../src/MixedTimeseries/types.ts                   |   1 +
 .../src/Timeseries/Area/controlPanel.tsx           |  27 +-
 .../src/Timeseries/Regular/Bar/controlPanel.tsx    |  22 +-
 .../src/Timeseries/Regular/Line/controlPanel.tsx   |  27 +-
 .../Timeseries/Regular/Scatter/controlPanel.tsx    |  27 +-
 .../Timeseries/Regular/SmoothLine/controlPanel.tsx |  27 +-
 .../src/Timeseries/Step/controlPanel.tsx           |  27 +-
 .../src/Timeseries/constants.ts                    |   4 +-
 .../src/Timeseries/transformProps.ts               |  59 +-
 .../src/Timeseries/transformers.ts                 |  28 -
 .../plugin-chart-echarts/src/Timeseries/types.ts   |   2 +
 .../src/Waterfall/EchartsWaterfall.tsx             |  58 +-
 .../src/Waterfall/buildQuery.ts                    |  15 +-
 .../src/Waterfall/controlPanel.tsx                 |  80 ++-
 .../src/Waterfall/images/example1.png              | Bin 0 -> 69717 bytes
 .../src/Waterfall/images/example2.png              | Bin 0 -> 51985 bytes
 .../src/Waterfall/images/example3.png              | Bin 0 -> 57935 bytes
 .../src/Waterfall/images/thumbnail.png             | Bin 77020 -> 54196 bytes
 .../plugin-chart-echarts/src/Waterfall/index.ts    |  19 +-
 .../src/Waterfall/transformProps.ts                | 353 ++++++----
 .../plugin-chart-echarts/src/Waterfall/types.ts    |  36 +-
 .../plugins/plugin-chart-echarts/src/controls.tsx  |  50 ++
 .../plugins/plugin-chart-echarts/src/defaults.ts   |   5 +
 .../plugin-chart-echarts/src/utils/controls.ts     |   3 +-
 .../utils/{getYAxisFormatter.ts => formatters.ts}  |  28 +
 .../plugin-chart-echarts/src/utils/series.ts       |  54 +-
 .../test/Bubble/transformProps.test.ts             |  49 +-
 .../test/MixedTimeseries/buildQuery.test.ts        |   1 +
 .../test/Timeseries/buildQuery.test.ts             |   4 +-
 .../test/Waterfall/buildQuery.test.ts              |  11 +-
 .../test/Waterfall/transformProps.test.ts          | 112 ++-
 .../test/utils/controls.test.ts                    |  22 +-
 .../plugin-chart-echarts/test/utils/series.test.ts | 127 +++-
 .../src/plugin/buildQuery.ts                       |   6 +-
 .../test/plugin/buildQuery.test.ts                 |  13 +
 .../plugins/plugin-chart-table/src/TableChart.tsx  |  12 +-
 .../plugin-chart-table/src/transformProps.ts       |   7 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |  59 ++
 superset-frontend/spec/helpers/shim.tsx            |  16 +-
 superset-frontend/src/SqlLab/actions/sqlLab.js     | 309 ++------
 .../src/SqlLab/actions/sqlLab.test.js              | 195 ++----
 .../SqlLab/components/AceEditorWrapper/index.tsx   |   6 +-
 .../EditorAutoSync/EditorAutoSync.test.tsx         | 137 ++++
 .../src/SqlLab/components/EditorAutoSync/index.tsx | 106 +++
 .../components/KeyboardShortcutButton/index.tsx    |   2 +
 .../SqlLab/components/QueryAutoRefresh/index.tsx   |   2 +-
 .../components/QueryHistory/QueryHistory.test.tsx  |   5 +-
 .../src/SqlLab/components/QueryHistory/index.tsx   |  29 +-
 .../QueryLimitSelect/QueryLimitSelect.test.tsx     |  59 +-
 .../SqlLab/components/QueryLimitSelect/index.tsx   |  13 +-
 .../src/SqlLab/components/QueryTable/index.tsx     |   9 +-
 .../SqlLab/components/ResultSet/ResultSet.test.tsx | 335 ++++++---
 .../src/SqlLab/components/ResultSet/index.tsx      |  73 +-
 .../components/SaveDatasetActionButton/index.tsx   |   2 +-
 .../SaveDatasetModal/SaveDatasetModal.test.tsx     |   2 +-
 .../SqlLab/components/SaveDatasetModal/index.tsx   |   2 +-
 .../{SouthPane.test.tsx => Results.test.tsx}       |  87 ++-
 .../src/SqlLab/components/SouthPane/Results.tsx    | 106 +++
 .../SqlLab/components/SouthPane/SouthPane.test.tsx |  81 ++-
 .../src/SqlLab/components/SouthPane/index.tsx      | 174 ++---
 .../SqlLab/components/SqlEditor/SqlEditor.test.tsx |   7 +-
 .../src/SqlLab/components/SqlEditor/index.tsx      |  25 +-
 superset-frontend/src/SqlLab/fixtures.ts           |   2 +
 .../middlewares/persistSqlLabStateEnhancer.js      |  36 +
 .../src/SqlLab/reducers/getInitialState.test.ts    | 113 ++-
 .../src/SqlLab/reducers/getInitialState.ts         |  76 +-
 superset-frontend/src/SqlLab/reducers/sqlLab.js    |  81 ++-
 .../src/SqlLab/reducers/sqlLab.test.js             |  38 +
 superset-frontend/src/SqlLab/types.ts              |  10 +-
 .../src/SqlLab/utils/emptyQueryResults.test.js     |   7 +-
 .../SqlLab/utils/reduxStateToLocalStorageHelper.js |   1 +
 .../branding/superset-logo-horiz-apache-dark.png   | Bin 0 -> 97457 bytes
 .../branding/superset-logo-horiz-apache-dark.svg   |  52 ++
 superset-frontend/src/assets/images/databend.png   | Bin 0 -> 7318 bytes
 superset-frontend/src/assets/images/doris.png      | Bin 0 -> 11539 bytes
 .../src/components/AuditInfo/ModifiedInfo.test.tsx |  42 ++
 .../src/components/AuditInfo/index.tsx             |  30 +
 .../src/components/ButtonGroup/index.tsx           |   6 +-
 superset-frontend/src/components/Chart/Chart.jsx   |   2 +-
 .../src/components/Chart/chartAction.js            |  30 +-
 .../src/components/Chart/chartActions.test.js      |  71 +-
 .../src/components/Collapse/Collapse.test.tsx      |   3 +-
 .../DatabaseSelector/DatabaseSelector.test.tsx     |   9 +-
 .../src/components/DatabaseSelector/index.tsx      |  10 +-
 .../src/components/Datasource/DatasourceEditor.jsx |   6 +-
 .../components/Datasource/DatasourceModal.test.jsx | 156 +++--
 .../src/components/Datasource/DatasourceModal.tsx  |  22 +-
 .../src/components/DropdownButton/index.tsx        |   2 +-
 .../components/DropdownSelectableIcon/index.tsx    |   2 +-
 .../src/components/DynamicEditableTitle/index.tsx  |   5 +-
 .../src/components/ErrorMessage/types.ts           |   9 -
 .../FilterableTable/FilterableTable.test.tsx       |  20 +-
 .../src/components/FilterableTable/index.tsx       | 136 +---
 .../FilterableTable/useCellContentParser.test.ts   |  58 ++
 .../FilterableTable/useCellContentParser.ts        |  69 ++
 .../src/components/FilterableTable/utils.test.tsx  |  79 +++
 .../src/components/FilterableTable/utils.tsx       |  59 ++
 .../src/components/JsonModal/JsonModal.test.tsx    |  60 ++
 .../src/components/JsonModal/index.tsx             | 112 +++
 .../components/MetadataBar/MetadataBar.test.tsx    |   3 +-
 .../src/components/Select/AsyncSelect.test.tsx     |  42 ++
 .../src/components/Select/AsyncSelect.tsx          |   1 +
 .../src/components/Select/Select.test.tsx          |  42 ++
 superset-frontend/src/components/Select/Select.tsx |   3 +-
 superset-frontend/src/components/Tags/Tag.test.tsx |  21 +
 superset-frontend/src/components/Tags/Tag.tsx      |  62 +-
 superset-frontend/src/components/Tags/TagsList.tsx |   6 +-
 .../src/components/Tags/utils.test.tsx             |  19 +
 superset-frontend/src/components/Tags/utils.tsx    |   2 +-
 .../TelemetryPixel.test.tsx}                       |  34 +-
 .../src/components/TelemetryPixel/index.tsx        |  59 ++
 superset-frontend/src/constants.ts                 |   4 +
 .../src/dashboard/actions/dashboardState.js        |   9 +-
 .../src/dashboard/components/Dashboard.jsx         |  15 +-
 .../src/dashboard/components/Dashboard.test.jsx    |  13 +-
 .../DashboardBuilder/DashboardBuilder.test.tsx     |   6 +-
 .../dashboard/components/FiltersBadge/index.tsx    |   2 +-
 .../HeaderActionsDropdown.test.tsx                 |   9 +-
 .../Header/HeaderActionsDropdown/index.jsx         |  47 +-
 .../dashboard/components/PropertiesModal/index.tsx |   2 +-
 .../components/SliceHeader/SliceHeader.test.tsx    |  13 +
 .../src/dashboard/components/SliceHeader/index.tsx |  11 +-
 .../SyncDashboardState.test.tsx}                   |  25 +-
 .../components/SyncDashboardState/index.tsx        | 103 +++
 .../dashboard/components/gridComponents/Tabs.jsx   |   8 +-
 .../DownloadMenuItems/DownloadAsImage.test.tsx     |  42 ++
 .../menu/DownloadMenuItems/DownloadAsImage.tsx     |  37 +
 .../menu/DownloadMenuItems/DownloadAsPdf.test.tsx  |  42 ++
 .../menu/DownloadMenuItems/DownloadAsPdf.tsx       |  37 +
 .../DownloadMenuItems/DownloadMenuItems.test.tsx   |  25 +
 .../components/menu/DownloadMenuItems/index.tsx    |  62 ++
 .../FilterBar/FilterControls/FilterControl.tsx     |   8 +-
 .../FilterBar/FilterControls/FilterValue.tsx       |   3 +-
 .../FiltersConfigForm/DatasetSelect.tsx            |  29 +-
 .../FiltersConfigForm/FiltersConfigForm.tsx        |  11 +-
 .../FiltersConfigModal/FiltersConfigForm/utils.ts  |  12 -
 .../src/dashboard/containers/Dashboard.ts          |   2 -
 .../dashboard/containers/DashboardComponent.jsx    |   4 +-
 .../src/dashboard/containers/DashboardPage.tsx     |  94 +--
 .../src/dashboard/reducers/dashboardState.js       |   9 +-
 .../src/dashboard/reducers/dashboardState.test.ts  |  22 +-
 superset-frontend/src/dataMask/reducer.ts          |   1 -
 .../src/explore/actions/saveModalActions.js        |  19 +-
 .../src/explore/actions/saveModalActions.test.js   |  53 ++
 .../components/ExploreChartHeader/index.jsx        |   4 +-
 .../src/explore/components/SaveModal.test.jsx      |  35 +-
 .../src/explore/components/SaveModal.tsx           |  23 +-
 .../components/controls/ColorPickerControl.jsx     |   7 +-
 .../controls/DatasourceControl/index.jsx           |  37 +-
 .../ColumnSelectPopover.test.tsx                   |  77 ++
 .../DndColumnSelectControl/ColumnSelectPopover.tsx |  39 +-
 .../ColumnSelectPopoverTrigger.tsx                 |  13 +-
 .../components/controls/ViewQueryModalFooter.tsx   |  33 +-
 .../controls/VizTypeControl/VizTypeGallery.tsx     |   1 +
 .../useExploreAdditionalActionsMenu/index.jsx      |   2 +-
 .../src/features/annotations/AnnotationModal.tsx   |   2 +-
 .../src/features/cssTemplates/CssTemplateModal.tsx |   5 +-
 .../src/features/cssTemplates/types.ts             |  11 +-
 .../databases/DatabaseModal/ExtraOptions.tsx       |  24 +-
 .../databases/DatabaseModal/index.test.tsx         |  17 +-
 .../src/features/databases/DatabaseModal/index.tsx |  12 +
 superset-frontend/src/features/databases/types.ts  |   3 +
 .../features/datasets/DatasetSelectLabel/index.tsx | 136 ++++
 superset-frontend/src/features/home/Menu.test.tsx  |   6 +-
 superset-frontend/src/features/home/Menu.tsx       |  65 +-
 superset-frontend/src/features/home/RightMenu.tsx  |   6 +
 .../queries/SavedQueryPreviewModal.test.jsx        |   2 +-
 .../features/queries/SavedQueryPreviewModal.tsx    |   6 +-
 .../src/features/rls/RowLevelSecurityModal.tsx     |   4 +-
 .../src/features/tags/BulkTagModal.tsx             |  13 +-
 .../src/features/tags/TagModal.test.tsx            |   2 +
 superset-frontend/src/features/tags/TagModal.tsx   |  49 +-
 superset-frontend/src/features/tags/tags.ts        |  17 +
 .../components/Select/SelectFilterPlugin.test.tsx  |  24 -
 .../components/Select/SelectFilterPlugin.tsx       |  41 +-
 superset-frontend/src/filters/components/common.ts |   4 +-
 .../src/hooks/apiResources/dashboards.ts           |   1 +
 .../src/hooks/apiResources/sqlEditorTabs.test.ts   |  99 +++
 .../src/hooks/apiResources/sqlEditorTabs.ts        |  70 ++
 superset-frontend/src/hooks/apiResources/sqlLab.ts |   2 +-
 superset-frontend/src/hooks/useDebounceValue.ts    |   4 +-
 superset-frontend/src/logger/LogUtils.ts           |   3 +
 .../src/pages/AlertReportList/index.tsx            |  74 +-
 superset-frontend/src/pages/AllEntities/index.tsx  |  46 +-
 .../src/pages/AnnotationLayerList/index.tsx        |  89 +--
 .../src/pages/AnnotationList/index.tsx             |   2 +-
 .../src/pages/ChartCreation/index.tsx              |  76 +-
 .../src/pages/ChartList/ChartList.test.jsx         |  42 +-
 superset-frontend/src/pages/ChartList/index.tsx    | 175 +++--
 .../src/pages/CssTemplateList/index.tsx            |  88 +--
 .../src/pages/DashboardList/DashboardList.test.jsx |  41 +-
 .../src/pages/DashboardList/index.tsx              | 195 +++---
 .../src/pages/DatabaseList/DatabaseList.test.jsx   |   2 +-
 superset-frontend/src/pages/DatabaseList/index.tsx |  80 ++-
 .../src/pages/DatasetList/DatasetList.test.tsx     |  61 +-
 superset-frontend/src/pages/DatasetList/index.tsx  | 109 +--
 .../src/pages/QueryHistoryList/index.tsx           |  43 +-
 .../RowLevelSecurityList.test.tsx                  |   6 +-
 .../src/pages/RowLevelSecurityList/index.tsx       |  39 +-
 .../pages/SavedQueryList/SavedQueryList.test.jsx   |  39 +-
 .../src/pages/SavedQueryList/index.tsx             | 146 ++--
 superset-frontend/src/pages/SqlLab/index.tsx       |  12 +-
 superset-frontend/src/pages/Tags/index.tsx         |  94 ++-
 superset-frontend/src/setup/setupClient.ts         |   7 +-
 superset-frontend/src/types/TagType.ts             |   1 +
 superset-frontend/src/types/dom-to-pdf.d.ts        |  19 +
 superset-frontend/src/utils/colorUtils.ts          |  50 --
 superset-frontend/src/utils/downloadAsImage.ts     |   2 +-
 .../utils/{downloadAsImage.ts => downloadAsPdf.ts} |  42 +-
 superset-frontend/src/utils/errorMessages.ts       |   1 +
 .../{errorMessages.ts => getOwnerName.test.ts}     |  16 +-
 .../color/types.ts => src/utils/getOwnerName.ts}   |  14 +-
 superset-frontend/src/utils/hostNamesConfig.js     |   7 +-
 superset-frontend/src/views/CRUD/types.ts          |  11 +-
 superset-frontend/src/views/store.ts               |   5 +-
 superset-frontend/webpack.config.js                |   1 +
 superset-websocket/README.md                       |   2 +-
 superset-websocket/config.example.json             |   1 +
 superset-websocket/config.test.json                |   5 +-
 superset-websocket/package-lock.json               | 774 ++++++++++++--------
 superset-websocket/package.json                    |  22 +-
 superset-websocket/spec/config.test.ts             |  10 +-
 superset-websocket/spec/index.test.ts              |  29 +-
 superset-websocket/src/config.ts                   |  28 +-
 superset-websocket/src/index.ts                    |  55 +-
 superset/annotation_layers/annotations/api.py      |  28 +-
 superset/annotation_layers/api.py                  |  24 +-
 superset/async_events/api.py                       |   3 +-
 superset/charts/api.py                             |  32 +-
 superset/charts/data/api.py                        |  18 +-
 superset/charts/data/query_context_cache_loader.py |   2 +-
 superset/charts/post_processing.py                 |   2 +-
 superset/charts/schemas.py                         |   4 +-
 superset/cli/importexport.py                       |  16 +-
 superset/cli/viz_migrations.py                     |  14 +-
 .../annotation_layer}/__init__.py                  |   0
 .../annotation_layer/annotation}/__init__.py       |   0
 .../annotation_layer/annotation}/create.py         |   6 +-
 .../annotation_layer/annotation}/delete.py         |   4 +-
 .../annotation_layer/annotation}/exceptions.py     |   0
 .../annotation_layer/annotation}/update.py         |   6 +-
 .../annotation_layer}/create.py                    |   4 +-
 .../annotation_layer}/delete.py                    |   4 +-
 .../annotation_layer}/exceptions.py                |   0
 .../annotation_layer}/update.py                    |   4 +-
 .../commands => commands/chart}/__init__.py        |   0
 .../{charts/commands => commands/chart}/create.py  |   4 +-
 .../importers => commands/chart/data}/__init__.py  |   0
 .../chart/data}/create_async_job_command.py        |   0
 .../chart/data}/get_data_command.py                |   4 +-
 .../{charts/commands => commands/chart}/delete.py  |   4 +-
 .../commands => commands/chart}/exceptions.py      |   0
 .../{charts/commands => commands/chart}/export.py  |   4 +-
 .../chart/importers}/__init__.py                   |   0
 .../chart}/importers/dispatcher.py                 |   2 +-
 .../chart}/importers/v1/__init__.py                |  10 +-
 .../chart}/importers/v1/utils.py                   |   1 -
 .../{charts/commands => commands/chart}/update.py  |   4 +-
 .../commands => commands/chart}/warm_up_cache.py   |   6 +-
 .../{connectors/base => commands/css}/__init__.py  |   0
 .../commands => commands/css}/delete.py            |   2 +-
 .../commands => commands/css}/exceptions.py        |   0
 .../commands => commands/dashboard}/__init__.py    |   0
 .../commands => commands/dashboard}/create.py      |  11 +-
 .../commands => commands/dashboard}/delete.py      |   8 +-
 .../dashboard/embedded}/__init__.py                |   0
 .../dashboard/embedded}/exceptions.py              |   0
 .../commands => commands/dashboard}/exceptions.py  |   0
 .../commands => commands/dashboard}/export.py      |   8 +-
 .../dashboard/filter_set}/__init__.py              |   0
 .../dashboard/filter_set}/base.py                  |   8 +-
 .../dashboard/filter_set}/create.py                |   6 +-
 .../dashboard/filter_set}/delete.py                |  10 +-
 .../dashboard/filter_set}/exceptions.py            |   0
 .../dashboard/filter_set}/update.py                |   6 +-
 .../dashboard/filter_state}/__init__.py            |   0
 .../dashboard/filter_state}/create.py              |   8 +-
 .../dashboard/filter_state}/delete.py              |  10 +-
 .../dashboard/filter_state}/get.py                 |   6 +-
 .../dashboard/filter_state}/update.py              |  10 +-
 .../dashboard/filter_state}/utils.py               |   6 +-
 .../dashboard/importers}/__init__.py               |   0
 .../dashboard}/importers/dispatcher.py             |   2 +-
 .../dashboard}/importers/v0.py                     |   2 +-
 .../dashboard}/importers/v1/__init__.py            |  16 +-
 .../dashboard}/importers/v1/utils.py               |   0
 .../dashboard/permalink}/__init__.py               |   0
 .../dashboard/permalink}/base.py                   |   0
 .../dashboard/permalink}/create.py                 |   4 +-
 .../dashboard/permalink}/get.py                    |   6 +-
 .../commands => commands/dashboard}/update.py      |   9 +-
 .../commands => commands/database}/__init__.py     |   0
 .../commands => commands/database}/create.py       |  12 +-
 .../commands => commands/database}/delete.py       |  10 +-
 .../commands => commands/database}/exceptions.py   |   0
 .../commands => commands/database}/export.py       |   2 +-
 .../database}/importers/__init__.py                |   0
 .../database}/importers/dispatcher.py              |   2 +-
 .../database}/importers/v1/__init__.py             |   6 +-
 .../database}/importers/v1/utils.py                |   0
 .../database/ssh_tunnel}/__init__.py               |   0
 .../database/ssh_tunnel}/create.py                 |   6 +-
 .../database/ssh_tunnel}/delete.py                 |   8 +-
 .../database/ssh_tunnel}/exceptions.py             |   0
 .../database/ssh_tunnel}/update.py                 |   6 +-
 .../commands => commands/database}/tables.py       |   6 +-
 .../database}/test_connection.py                   |   8 +-
 .../commands => commands/database}/update.py       |  12 +-
 .../commands => commands/database}/validate.py     |   4 +-
 .../commands => commands/database}/validate_sql.py |   4 +-
 .../commands => commands/dataset}/__init__.py      |   0
 .../dataset/columns}/__init__.py                   |   0
 .../dataset/columns}/delete.py                     |  10 +-
 .../dataset/columns}/exceptions.py                 |   0
 .../commands => commands/dataset}/create.py        |   6 +-
 .../commands => commands/dataset}/delete.py        |   8 +-
 .../commands => commands/dataset}/duplicate.py     |  10 +-
 .../commands => commands/dataset}/exceptions.py    |   0
 .../commands => commands/dataset}/export.py        |   2 +-
 .../dataset}/importers/__init__.py                 |   0
 .../dataset}/importers/dispatcher.py               |   2 +-
 .../commands => commands/dataset}/importers/v0.py  |  32 +-
 .../dataset}/importers/v1/__init__.py              |   6 +-
 .../dataset}/importers/v1/utils.py                 |   2 +-
 .../dataset/metrics}/__init__.py                   |   0
 .../dataset/metrics}/delete.py                     |  10 +-
 .../dataset/metrics}/exceptions.py                 |   0
 .../commands => commands/dataset}/refresh.py       |   6 +-
 .../commands => commands/dataset}/update.py        |  13 +-
 .../commands => commands/dataset}/warm_up_cache.py |   8 +-
 .../commands => commands/explore}/__init__.py      |   0
 .../explore/form_data}/__init__.py                 |   0
 .../explore/form_data}/create.py                   |   8 +-
 .../explore/form_data}/delete.py                   |  10 +-
 .../commands => commands/explore/form_data}/get.py |   8 +-
 .../explore/form_data}/parameters.py               |   0
 .../explore/form_data}/state.py                    |   0
 .../explore/form_data}/update.py                   |  12 +-
 .../explore/form_data}/utils.py                    |   8 +-
 .../{explore/commands => commands/explore}/get.py  |  15 +-
 .../commands => commands/explore}/parameters.py    |   0
 .../explore/permalink}/__init__.py                 |   0
 .../explore/permalink}/base.py                     |   0
 .../explore/permalink}/create.py                   |   4 +-
 .../commands => commands/explore/permalink}/get.py |   6 +-
 superset/commands/export/assets.py                 |  10 +-
 superset/commands/importers/v1/assets.py           |  22 +-
 superset/commands/importers/v1/examples.py         |  22 +-
 superset/commands/importers/v1/utils.py            |   2 +
 .../commands => commands/key_value}/__init__.py    |   0
 .../commands => commands/key_value}/create.py      |   0
 .../commands => commands/key_value}/delete.py      |   8 +-
 .../key_value}/delete_expired.py                   |   0
 .../commands => commands/key_value}/get.py         |   7 +-
 .../commands => commands/key_value}/update.py      |   6 +-
 .../commands => commands/key_value}/upsert.py      |   8 +-
 .../commands => commands/query}/__init__.py        |   0
 .../commands => commands/query}/delete.py          |   8 +-
 .../commands => commands/query}/exceptions.py      |   0
 .../commands => commands/query}/export.py          |   2 +-
 .../query/importers}/__init__.py                   |   0
 .../query}/importers/dispatcher.py                 |   2 +-
 .../query}/importers/v1/__init__.py                |   8 +-
 .../query}/importers/v1/utils.py                   |   0
 .../importers => commands/report}/__init__.py      |   0
 .../{reports/commands => commands/report}/alert.py |   2 +-
 .../{reports/commands => commands/report}/base.py  |   6 +-
 .../commands => commands/report}/create.py         |  10 +-
 .../commands => commands/report}/delete.py         |   8 +-
 .../commands => commands/report}/exceptions.py     |   0
 .../commands => commands/report}/execute.py        |  26 +-
 .../commands => commands/report}/log_prune.py      |   2 +-
 .../commands => commands/report}/update.py         |  12 +-
 .../commands => commands/security}/__init__.py     |   0
 .../commands => commands/security}/create.py       |   0
 .../commands => commands/security}/delete.py       |   8 +-
 .../commands => commands/security}/exceptions.py   |   0
 .../commands => commands/security}/update.py       |   2 +-
 .../commands => commands/sql_lab}/__init__.py      |   0
 .../commands => commands/sql_lab}/estimate.py      |   0
 .../commands => commands/sql_lab}/execute.py       |   0
 .../commands => commands/sql_lab}/export.py        |   0
 .../commands => commands/sql_lab}/results.py       |   0
 .../{sqllab/commands => commands/tag}/__init__.py  |   0
 superset/{tags/commands => commands/tag}/create.py |  44 +-
 superset/{tags/commands => commands/tag}/delete.py |  12 +-
 .../{tags/commands => commands/tag}/exceptions.py  |   0
 superset/{tags/commands => commands/tag}/update.py |  10 +-
 superset/{tags/commands => commands/tag}/utils.py  |  16 +-
 .../temporary_cache}/__init__.py                   |   0
 .../temporary_cache}/create.py                     |   4 +-
 .../temporary_cache}/delete.py                     |   4 +-
 .../commands => commands/temporary_cache}/entry.py |   0
 .../temporary_cache}/exceptions.py                 |   0
 .../commands => commands/temporary_cache}/get.py   |   4 +-
 .../temporary_cache}/parameters.py                 |   0
 .../temporary_cache}/update.py                     |   4 +-
 superset/commands/utils.py                         |   2 +-
 superset/common/query_actions.py                   |   2 +-
 superset/common/query_context.py                   |   2 +-
 superset/common/query_context_factory.py           |   3 +-
 superset/common/query_context_processor.py         |  11 +-
 superset/common/query_object.py                    |   2 +-
 superset/common/query_object_factory.py            |  95 +--
 superset/common/tags.py                            |  26 +-
 superset/config.py                                 |  68 +-
 superset/connectors/base/models.py                 | 776 ---------------------
 superset/connectors/base/views.py                  |  48 --
 superset/connectors/sqla/models.py                 | 691 ++++++++++++++++--
 superset/connectors/sqla/views.py                  |   3 +-
 superset/css_templates/api.py                      |  12 +-
 .../daos/{annotation.py => annotation_layer.py}    |   0
 superset/daos/base.py                              |  13 +-
 superset/daos/chart.py                             |   2 +-
 superset/daos/dashboard.py                         |  15 +-
 superset/daos/dataset.py                           |   6 +-
 superset/daos/tag.py                               |  46 +-
 superset/dashboards/api.py                         |  25 +-
 superset/dashboards/filter_sets/api.py             |  14 +-
 superset/dashboards/filter_state/api.py            |   8 +-
 superset/dashboards/permalink/api.py               |  10 +-
 superset/dashboards/schemas.py                     |  24 +-
 superset/databases/api.py                          |  59 +-
 superset/databases/schemas.py                      |   7 +-
 superset/databases/utils.py                        |   2 +-
 superset/datasets/api.py                           |  45 +-
 superset/datasets/columns/api.py                   |   8 +-
 superset/datasets/metrics/api.py                   |   8 +-
 superset/datasource/api.py                         |   9 +-
 superset/db_engine_specs/__init__.py               |  39 +-
 superset/db_engine_specs/base.py                   |  32 +-
 superset/db_engine_specs/databend.py               | 353 ++++++++++
 superset/db_engine_specs/doris.py                  | 278 ++++++++
 superset/db_engine_specs/dremio.py                 |  34 +-
 superset/db_engine_specs/druid.py                  |  11 -
 superset/db_engine_specs/elasticsearch.py          |  17 +-
 superset/db_engine_specs/hive.py                   |   8 +-
 .../commands/state.py => db_engine_specs/ibmi.py}  |  16 +-
 superset/db_engine_specs/presto.py                 |   7 +-
 superset/db_engine_specs/trino.py                  |  96 ++-
 superset/embedded/api.py                           |   6 +-
 superset/embedded/view.py                          |   4 +-
 superset/examples/bart_lines.py                    |   2 +-
 .../examples/configs/charts/Filter_Segments.yaml   |  68 --
 .../configs/charts/Filtering_Vaccines.yaml         |  53 --
 .../configs/charts/Vehicle_Sales_Filter.yaml       |  47 --
 .../configs/charts/Video_Game_Sales_Filter.yaml    |  55 --
 .../dashboards/COVID_Vaccine_Dashboard.yaml        | 128 ++--
 .../dashboards/FCC_New_Coder_Survey_2018.yaml      | 608 ++++++++--------
 .../configs/dashboards/Sales_Dashboard.yaml        | 300 ++++----
 .../configs/dashboards/Video_Game_Sales.yaml       | 389 +++++------
 superset/examples/country_map.py                   |   2 +-
 superset/examples/css_templates.py                 |   4 +-
 superset/examples/deck.py                          |   2 +-
 superset/examples/energy.py                        |   2 +-
 superset/examples/flights.py                       |   2 +-
 superset/examples/long_lat.py                      |   2 +-
 superset/examples/misc_dashboard.py                | 150 +---
 superset/examples/multiformat_time_series.py       |   2 +-
 superset/examples/paris.py                         |   2 +-
 superset/examples/random_time_series.py            |   2 +-
 superset/examples/sf_population_polygons.py        |   2 +-
 superset/examples/tabbed_dashboard.py              |   3 +-
 superset/examples/world_bank.py                    |  57 +-
 superset/explore/api.py                            |  14 +-
 superset/explore/form_data/api.py                  |  18 +-
 superset/explore/permalink/api.py                  |  10 +-
 superset/explore/utils.py                          |  10 +-
 superset/extensions/metadb.py                      |  40 +-
 superset/extensions/metastore_cache.py             |  10 +-
 superset/initialization/__init__.py                |   6 +
 superset/jinja_context.py                          |  89 ++-
 superset/key_value/shared_entries.py               |   4 +-
 superset/migrations/shared/migrate_viz/base.py     |  20 +-
 .../migrations/shared/migrate_viz/processors.py    | 150 +++-
 superset/migrations/shared/security_converge.py    |   1 -
 superset/migrations/shared/utils.py                |   8 +-
 ..._08-54_c3a8f8611885_materializing_permission.py |   1 -
 ...-09-07_23-50_33d996bcc382_update_slice_model.py |   2 -
 ...4_12-31_db0c65b146bd_update_slice_model_json.py |   1 -
 ...7c195a_rewriting_url_from_shortner_with_new_.py |   1 -
 ...-08_08-19_67a6ac9b727b_update_spatial_params.py |   1 -
 ...2-17_11-06_21e88bc06c02_annotation_migration.py |   2 -
 .../2018-02-13_08-07_e866bd2d4976_smaller_grid.py  |   2 -
 ...9_bf706ae5eb46_cal_heatmap_metric_to_metrics.py |   1 -
 ..._bebcf3fed1fe_convert_dashboard_v1_positions.py |   1 -
 ...8-07-26_11-10_c82ee8a39623_add_implicit_tags.py |   6 +-
 .../versions/2018-08-01_11-47_7fcdcde0761c_.py     |   1 -
 ...a3f04bc82_add_parent_ids_in_dashboard_layout.py |   2 -
 ...er_sql_column_data_type_in_query_mysql_table.py |   2 +-
 ...8ea_change_table_schema_description_to_long_.py |   2 +-
 ..._14-13_3325d4caccc8_dashboard_scoped_filters.py |   2 -
 ...978245563a02_migrate_iframe_to_dash_markdown.py |   1 -
 ...b56500de1855_add_uuid_column_to_import_mixin.py |   1 -
 ...1412ec1e5a7b_legacy_force_directed_to_echart.py |   2 -
 ...665d_fix_table_chart_conditional_formatting_.py |   1 -
 ...317970b4400c_added_time_secondary_column_to_.py |  34 +-
 ...2-01_12-03_b7851ee5522f_replay_317970b4400c.py} |  29 +-
 superset/models/core.py                            |  15 +-
 superset/models/dashboard.py                       |   8 +-
 superset/models/helpers.py                         |  94 +--
 superset/models/slice.py                           |   2 +-
 superset/queries/saved_queries/api.py              |  28 +-
 superset/reports/api.py                            |  26 +-
 superset/reports/notifications/slack.py            |  11 +-
 superset/row_level_security/api.py                 |  15 +-
 superset/row_level_security/schemas.py             |   2 +
 superset/security/api.py                           |   2 +-
 superset/security/manager.py                       |  43 +-
 superset/sql_lab.py                                |  19 +-
 superset/sql_parse.py                              | 109 ++-
 superset/sqllab/api.py                             |  58 +-
 superset/sqllab/query_render.py                    |   6 +-
 superset/sqllab/schemas.py                         |   4 +
 superset/sqllab/validators.py                      |   2 +-
 superset/superset_typing.py                        |   2 +
 superset/tags/api.py                               |  60 +-
 superset/tags/models.py                            |  68 +-
 superset/tags/schemas.py                           |   4 +-
 superset/tasks/async_queries.py                    |   2 +-
 superset/tasks/scheduler.py                        |   6 +-
 superset/temporary_cache/api.py                    |   8 +-
 superset/temporary_cache/commands/__init__.py      |  16 -
 superset/translations/de/LC_MESSAGES/messages.json |   1 -
 superset/translations/de/LC_MESSAGES/messages.po   |   4 -
 superset/translations/en/LC_MESSAGES/messages.json |   1 -
 superset/translations/en/LC_MESSAGES/messages.po   |   4 -
 superset/translations/es/LC_MESSAGES/messages.json |   1 -
 superset/translations/es/LC_MESSAGES/messages.po   |   4 -
 superset/translations/fr/LC_MESSAGES/messages.json |  76 +-
 superset/translations/fr/LC_MESSAGES/messages.po   |  99 +--
 superset/translations/it/LC_MESSAGES/messages.json |   1 -
 superset/translations/it/LC_MESSAGES/messages.po   |   4 -
 superset/translations/ja/LC_MESSAGES/messages.json |   1 -
 superset/translations/ja/LC_MESSAGES/messages.po   |   4 -
 superset/translations/ko/LC_MESSAGES/messages.json |   1 -
 superset/translations/ko/LC_MESSAGES/messages.po   |   4 -
 superset/translations/messages.pot                 |   4 -
 superset/translations/nl/LC_MESSAGES/messages.json |   1 -
 superset/translations/nl/LC_MESSAGES/messages.po   |   4 -
 superset/translations/pt/LC_MESSAGES/message.json  |   1 -
 superset/translations/pt/LC_MESSAGES/messages.json |   1 -
 superset/translations/pt/LC_MESSAGES/messages.po   |   4 -
 .../translations/pt_BR/LC_MESSAGES/messages.json   |   1 -
 .../translations/pt_BR/LC_MESSAGES/messages.po     |   4 -
 superset/translations/ru/LC_MESSAGES/messages.json |   1 -
 superset/translations/ru/LC_MESSAGES/messages.po   |   4 -
 superset/translations/sk/LC_MESSAGES/messages.json |   1 -
 superset/translations/sk/LC_MESSAGES/messages.po   |   4 -
 superset/translations/sl/LC_MESSAGES/messages.json |   1 -
 superset/translations/sl/LC_MESSAGES/messages.po   |   4 -
 superset/translations/zh/LC_MESSAGES/messages.json |   1 -
 superset/translations/zh/LC_MESSAGES/messages.po   |   4 -
 superset/utils/cache.py                            |  26 +-
 superset/utils/core.py                             | 100 +--
 superset/utils/date_parser.py                      |   2 +-
 superset/utils/retries.py                          |   3 +
 superset/utils/screenshots.py                      |   2 +-
 superset/utils/url_map_converters.py               |   4 +-
 superset/utils/webdriver.py                        |  77 +-
 superset/views/api.py                              |   2 +-
 superset/views/base.py                             |  76 +-
 superset/views/core.py                             |  27 +-
 superset/views/dashboard/views.py                  |   2 +-
 superset/views/database/forms.py                   |   4 -
 superset/views/database/validators.py              |   2 +-
 superset/views/database/views.py                   |   3 +-
 superset/views/datasource/utils.py                 |  27 +-
 superset/views/datasource/views.py                 |   8 +-
 superset/views/sql_lab/views.py                    |   4 +
 superset/views/sqllab.py                           |  12 +-
 superset/viz.py                                    |   2 +-
 tests/integration_tests/base_tests.py              |   3 +-
 tests/integration_tests/charts/api_tests.py        |  10 +-
 tests/integration_tests/charts/commands_tests.py   |  18 +-
 tests/integration_tests/charts/data/api_tests.py   |   5 +-
 tests/integration_tests/cli_tests.py               |  18 +-
 tests/integration_tests/conftest.py                |   8 +-
 tests/integration_tests/core_tests.py              |  56 +-
 tests/integration_tests/css_templates/api_tests.py |  25 +-
 tests/integration_tests/csv_upload_tests.py        |   1 -
 tests/integration_tests/dashboard_tests.py         |   7 +-
 tests/integration_tests/dashboard_utils.py         |   2 +-
 tests/integration_tests/dashboards/api_tests.py    |  92 ++-
 .../integration_tests/dashboards/commands_tests.py |  36 +-
 tests/integration_tests/dashboards/dao_tests.py    |  56 --
 .../dashboards/dashboard_test_utils.py             |   2 -
 .../dashboards/filter_state/api_tests.py           |   4 +-
 .../dashboards/permalink/api_tests.py              |   2 +-
 .../dashboards/security/security_dataset_tests.py  |   6 +-
 .../dashboards/security/security_rbac_tests.py     |   2 +-
 tests/integration_tests/databases/api_tests.py     |  39 +-
 .../integration_tests/databases/commands_tests.py  |  40 +-
 .../ssh_tunnel/commands/commands_tests.py          |  10 +-
 tests/integration_tests/datasets/api_tests.py      |   4 +-
 tests/integration_tests/datasets/commands_tests.py |  20 +-
 tests/integration_tests/datasource/api_tests.py    |  46 +-
 tests/integration_tests/datasource_tests.py        |   3 +-
 .../db_engine_specs/elasticsearch_tests.py         |  43 ++
 tests/integration_tests/explore/api_tests.py       |   2 +-
 .../explore/form_data/api_tests.py                 |   4 +-
 .../explore/form_data/commands_tests.py            |  10 +-
 .../explore/permalink/commands_tests.py            |  10 +-
 .../integration_tests/fixtures/energy_dashboard.py |   2 -
 tests/integration_tests/import_export_tests.py     |   6 +-
 .../importexport/commands_tests.py                 |   2 +-
 .../key_value/commands/create_test.py              |  20 +-
 .../key_value/commands/delete_test.py              |   6 +-
 .../key_value/commands/get_test.py                 |  10 +-
 .../key_value/commands/update_test.py              |  12 +-
 .../key_value/commands/upsert_test.py              |  14 +-
 .../06e1e70058c7_migrate_legacy_area__tests.py     |  99 ---
 ...c747c78868b6_migrating_legacy_treemap__tests.py |   4 +-
 .../queries/saved_queries/api_tests.py             |  14 +-
 .../queries/saved_queries/commands_tests.py        |   8 +-
 tests/integration_tests/query_context_tests.py     |   8 +-
 tests/integration_tests/reports/alert_tests.py     |  22 +-
 .../commands/create_dashboard_report_tests.py      |   4 +-
 .../commands/execute_dashboard_report_tests.py     |  14 +-
 tests/integration_tests/reports/commands_tests.py  |  32 +-
 tests/integration_tests/reports/scheduler_tests.py |  10 +-
 .../security/migrate_roles_tests.py                |   1 -
 tests/integration_tests/sql_lab/api_tests.py       |  25 +-
 tests/integration_tests/sql_lab/commands_tests.py  |  22 +-
 tests/integration_tests/sqllab_tests.py            |   7 +
 tests/integration_tests/strategy_tests.py          |  12 +-
 tests/integration_tests/superset_test_config.py    |   9 +-
 .../superset_test_config_thumbnails.py             |   7 +-
 tests/integration_tests/tagging_tests.py           |  16 +-
 tests/integration_tests/tags/api_tests.py          | 103 ++-
 tests/integration_tests/tags/commands_tests.py     |  34 +-
 tests/integration_tests/tags/dao_tests.py          |  57 +-
 .../integration_tests/tasks/async_queries_tests.py |   4 +-
 tests/integration_tests/utils_tests.py             |  56 +-
 .../charts/commands/importers/v1/import_test.py    |   6 +-
 .../charts/commands/importers/v1/utils_test.py     |  16 +-
 .../common/test_get_aggregated_join_column.py      |   2 +-
 tests/unit_tests/common/test_process_time_range.py |  48 ++
 .../unit_tests/common/test_query_object_factory.py |  90 +--
 tests/unit_tests/dao/dataset_test.py               |  83 +++
 tests/unit_tests/dao/tag_test.py                   |   8 +-
 .../commands/importers/v1/import_test.py           |   6 +-
 .../dashboards/commands/importers/v1/utils_test.py |   4 +-
 tests/unit_tests/databases/api_test.py             |   6 +-
 .../databases/commands/importers/v1/import_test.py |  29 +-
 .../databases/commands/test_connection_test.py     |   2 +-
 .../databases/ssh_tunnel/commands/create_test.py   |   6 +-
 .../databases/ssh_tunnel/commands/delete_test.py   |   4 +-
 .../databases/ssh_tunnel/commands/update_test.py   |   6 +-
 tests/unit_tests/datasets/commands/export_test.py  |   2 +-
 .../datasets/commands/importers/v1/import_test.py  |  18 +-
 tests/unit_tests/db_engine_specs/test_databend.py  | 130 ++++
 tests/unit_tests/db_engine_specs/test_doris.py     | 147 ++++
 tests/unit_tests/db_engine_specs/test_dremio.py    |  16 +
 tests/unit_tests/db_engine_specs/test_trino.py     | 122 ++++
 tests/unit_tests/explore/utils_test.py             |  10 +-
 .../unit_tests/fixtures/bash_mock.py               |  38 +-
 tests/unit_tests/jinja_context_test.py             |  11 +-
 .../viz/dual_line_to_mixed_chart_test.py           |  39 +-
 .../viz/nvd3_area_chart_to_echarts_test.py         |  36 +-
 .../viz/nvd3_bubble_chart_to_echarts_test.py       |  76 ++
 .../viz/nvd3_line_chart_to_echarts_test.py         |  33 +-
 .../migrations/viz/pivot_table_v1_v2_test.py       |  94 +--
 ...e_v1_v2_test.py => time_related_fields_test.py} |  56 +-
 tests/unit_tests/migrations/viz/utils.py           |  96 +++
 .../reports/notifications/slack_tests.py           |  58 ++
 tests/unit_tests/scripts/docker_build_push_test.py |  44 ++
 .../unit_tests/scripts/tag_latest_release_test.py  |  49 ++
 tests/unit_tests/sql_lab_test.py                   |  11 +-
 tests/unit_tests/sql_parse_tests.py                | 191 ++++-
 tests/unit_tests/tags/commands/create_test.py      |  20 +-
 tests/unit_tests/tags/commands/update_test.py      |  26 +-
 tests/unit_tests/tasks/test_async_queries.py       |   2 +-
 tests/unit_tests/utils/date_parser_tests.py        |   2 +-
 tests/unit_tests/utils/test_core.py                | 170 +++++
 815 files changed, 13946 insertions(+), 8355 deletions(-)
 create mode 100644 .github/ISSUE_TEMPLATE/config.yml
 create mode 100644 RELEASING/release-notes-3-1/README.md
 create mode 100644 RELEASING/release-notes-3-1/media/bubble_chart.png
 create mode 100644 RELEASING/release-notes-3-1/media/contour.png
 create mode 100644 RELEASING/release-notes-3-1/media/databend.png
 create mode 100644 RELEASING/release-notes-3-1/media/dataset_selector.png
 create mode 100644 RELEASING/release-notes-3-1/media/doris.png
 create mode 100644 RELEASING/release-notes-3-1/media/france.png
 create mode 100644 RELEASING/release-notes-3-1/media/kazakhstan.png
 create mode 100644 RELEASING/release-notes-3-1/media/keyboard_shortcuts.png
 create mode 100644 RELEASING/release-notes-3-1/media/kyrgyzstan.png
 create mode 100644 RELEASING/release-notes-3-1/media/sql_formatting.png
 create mode 100644 RELEASING/release-notes-3-1/media/tajikistan.png
 create mode 100644 RELEASING/release-notes-3-1/media/turkmenistan.png
 create mode 100644 RELEASING/release-notes-3-1/media/uzbekistan.png
 create mode 100644 RELEASING/release-notes-3-1/media/waterfall_chart.png
 create mode 100644 docs/docs/databases/databend.mdx
 create mode 100644 docs/docs/databases/doris.mdx
 create mode 100644 docs/docs/quickstart.mdx
 create mode 100644 docs/static/img/databases/doris.png
 rename {.github/workflows => scripts}/docker_build_push.sh (75%)
 create mode 100644 scripts/generate_frontend_class_component_tasklist.js
 copy superset-frontend/{src/types/TagType.ts => packages/superset-ui-core/src/validator/validateMapboxStylesUrl.ts} (68%)
 delete mode 100644 superset-frontend/packages/superset-ui-core/src/validator/validateMaxValue.ts
 rename superset-frontend/packages/superset-ui-core/test/validator/{validateMaxValue.test.ts => validateMapboxStylesUrl.test.ts} (52%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/france_regions.geojson
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Waterfall/images/example1.png
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Waterfall/images/example2.png
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Waterfall/images/example3.png
 rename superset-frontend/plugins/plugin-chart-echarts/src/utils/{getYAxisFormatter.ts => formatters.ts} (74%)
 create mode 100644 superset-frontend/src/SqlLab/components/EditorAutoSync/EditorAutoSync.test.tsx
 create mode 100644 superset-frontend/src/SqlLab/components/EditorAutoSync/index.tsx
 copy superset-frontend/src/SqlLab/components/SouthPane/{SouthPane.test.tsx => Results.test.tsx} (60%)
 create mode 100644 superset-frontend/src/SqlLab/components/SouthPane/Results.tsx
 create mode 100644 superset-frontend/src/assets/branding/superset-logo-horiz-apache-dark.png
 create mode 100644 superset-frontend/src/assets/branding/superset-logo-horiz-apache-dark.svg
 create mode 100644 superset-frontend/src/assets/images/databend.png
 create mode 100644 superset-frontend/src/assets/images/doris.png
 create mode 100644 superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx
 create mode 100644 superset-frontend/src/components/AuditInfo/index.tsx
 create mode 100644 superset-frontend/src/components/FilterableTable/useCellContentParser.test.ts
 create mode 100644 superset-frontend/src/components/FilterableTable/useCellContentParser.ts
 create mode 100644 superset-frontend/src/components/FilterableTable/utils.test.tsx
 create mode 100644 superset-frontend/src/components/FilterableTable/utils.tsx
 create mode 100644 superset-frontend/src/components/JsonModal/JsonModal.test.tsx
 create mode 100644 superset-frontend/src/components/JsonModal/index.tsx
 create mode 100644 superset-frontend/src/components/Tags/utils.test.tsx
 copy superset-frontend/src/components/{Tags/Tag.test.tsx => TelemetryPixel/TelemetryPixel.test.tsx} (58%)
 create mode 100644 superset-frontend/src/components/TelemetryPixel/index.tsx
 copy superset-frontend/src/{components/Tags/Tag.test.tsx => dashboard/components/SyncDashboardState/SyncDashboardState.test.tsx} (63%)
 create mode 100644 superset-frontend/src/dashboard/components/SyncDashboardState/index.tsx
 create mode 100644 superset-frontend/src/dashboard/components/menu/DownloadMenuItems/DownloadAsImage.test.tsx
 create mode 100644 superset-frontend/src/dashboard/components/menu/DownloadMenuItems/DownloadAsImage.tsx
 create mode 100644 superset-frontend/src/dashboard/components/menu/DownloadMenuItems/DownloadAsPdf.test.tsx
 create mode 100644 superset-frontend/src/dashboard/components/menu/DownloadMenuItems/DownloadAsPdf.tsx
 create mode 100644 superset-frontend/src/dashboard/components/menu/DownloadMenuItems/DownloadMenuItems.test.tsx
 create mode 100644 superset-frontend/src/dashboard/components/menu/DownloadMenuItems/index.tsx
 create mode 100644 superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.test.tsx
 create mode 100644 superset-frontend/src/features/datasets/DatasetSelectLabel/index.tsx
 create mode 100644 superset-frontend/src/hooks/apiResources/sqlEditorTabs.test.ts
 create mode 100644 superset-frontend/src/hooks/apiResources/sqlEditorTabs.ts
 create mode 100644 superset-frontend/src/types/dom-to-pdf.d.ts
 delete mode 100644 superset-frontend/src/utils/colorUtils.ts
 copy superset-frontend/src/utils/{downloadAsImage.ts => downloadAsPdf.ts} (66%)
 copy superset-frontend/src/utils/{errorMessages.ts => getOwnerName.test.ts} (73%)
 copy superset-frontend/{packages/superset-ui-core/src/color/types.ts => src/utils/getOwnerName.ts} (81%)
 rename superset/{annotation_layers/annotations/commands => commands/annotation_layer}/__init__.py (100%)
 rename superset/{annotation_layers/commands => commands/annotation_layer/annotation}/__init__.py (100%)
 rename superset/{annotation_layers/annotations/commands => commands/annotation_layer/annotation}/create.py (92%)
 rename superset/{annotation_layers/annotations/commands => commands/annotation_layer/annotation}/delete.py (93%)
 rename superset/{annotation_layers/annotations/commands => commands/annotation_layer/annotation}/exceptions.py (100%)
 rename superset/{annotation_layers/annotations/commands => commands/annotation_layer/annotation}/update.py (93%)
 rename superset/{annotation_layers/commands => commands/annotation_layer}/create.py (94%)
 rename superset/{annotation_layers/commands => commands/annotation_layer}/delete.py (94%)
 rename superset/{annotation_layers/commands => commands/annotation_layer}/exceptions.py (100%)
 rename superset/{annotation_layers/commands => commands/annotation_layer}/update.py (95%)
 rename superset/{charts/commands => commands/chart}/__init__.py (100%)
 rename superset/{charts/commands => commands/chart}/create.py (98%)
 rename superset/{charts/commands/importers => commands/chart/data}/__init__.py (100%)
 copy superset/{charts/data/commands => commands/chart/data}/create_async_job_command.py (100%)
 rename superset/{charts/data/commands => commands/chart/data}/get_data_command.py (97%)
 rename superset/{charts/commands => commands/chart}/delete.py (98%)
 rename superset/{charts/commands => commands/chart}/exceptions.py (100%)
 rename superset/{charts/commands => commands/chart}/export.py (95%)
 rename superset/{charts/data/commands => commands/chart/importers}/__init__.py (100%)
 rename superset/{charts/commands => commands/chart}/importers/dispatcher.py (98%)
 rename superset/{charts/commands => commands/chart}/importers/v1/__init__.py (92%)
 rename superset/{charts/commands => commands/chart}/importers/v1/utils.py (98%)
 rename superset/{charts/commands => commands/chart}/update.py (98%)
 rename superset/{charts/commands => commands/chart}/warm_up_cache.py (96%)
 rename superset/{connectors/base => commands/css}/__init__.py (100%)
 rename superset/{css_templates/commands => commands/css}/delete.py (97%)
 rename superset/{css_templates/commands => commands/css}/exceptions.py (100%)
 rename superset/{css_templates/commands => commands/dashboard}/__init__.py (100%)
 rename superset/{dashboards/commands => commands/dashboard}/create.py (94%)
 rename superset/{dashboards/commands => commands/dashboard}/delete.py (98%)
 rename superset/{dashboards/commands => commands/dashboard/embedded}/__init__.py (100%)
 rename superset/{embedded_dashboard/commands => commands/dashboard/embedded}/exceptions.py (100%)
 rename superset/{dashboards/commands => commands/dashboard}/exceptions.py (100%)
 rename superset/{dashboards/commands => commands/dashboard}/export.py (95%)
 rename superset/{dashboards/commands/importers => commands/dashboard/filter_set}/__init__.py (100%)
 rename superset/{dashboards/filter_sets/commands => commands/dashboard/filter_set}/base.py (96%)
 rename superset/{dashboards/filter_sets/commands => commands/dashboard/filter_set}/create.py (95%)
 rename superset/{dashboards/filter_sets/commands => commands/dashboard/filter_set}/delete.py (90%)
 rename superset/{dashboards/filter_sets/commands => commands/dashboard/filter_set}/exceptions.py (100%)
 rename superset/{dashboards/filter_sets/commands => commands/dashboard/filter_set}/update.py (91%)
 rename superset/{dashboards/filter_sets/commands => commands/dashboard/filter_state}/__init__.py (100%)
 rename superset/{dashboards/filter_state/commands => commands/dashboard/filter_state}/create.py (87%)
 rename superset/{dashboards/filter_state/commands => commands/dashboard/filter_state}/delete.py (84%)
 rename superset/{dashboards/filter_state/commands => commands/dashboard/filter_state}/get.py (89%)
 rename superset/{dashboards/filter_state/commands => commands/dashboard/filter_state}/update.py (87%)
 rename superset/{dashboards/filter_state/commands => commands/dashboard/filter_state}/utils.py (91%)
 rename superset/{dashboards/filter_state/commands => commands/dashboard/importers}/__init__.py (100%)
 rename superset/{dashboards/commands => commands/dashboard}/importers/dispatcher.py (97%)
 rename superset/{dashboards/commands => commands/dashboard}/importers/v0.py (99%)
 rename superset/{dashboards/commands => commands/dashboard}/importers/v1/__init__.py (93%)
 rename superset/{dashboards/commands => commands/dashboard}/importers/v1/utils.py (100%)
 rename superset/{dashboards/permalink/commands => commands/dashboard/permalink}/__init__.py (100%)
 rename superset/{dashboards/permalink/commands => commands/dashboard/permalink}/base.py (100%)
 rename superset/{dashboards/permalink/commands => commands/dashboard/permalink}/create.py (94%)
 rename superset/{dashboards/permalink/commands => commands/dashboard/permalink}/get.py (91%)
 rename superset/{dashboards/commands => commands/dashboard}/update.py (96%)
 rename superset/{databases/commands => commands/database}/__init__.py (100%)
 rename superset/{databases/commands => commands/database}/create.py (95%)
 rename superset/{databases/commands => commands/database}/delete.py (96%)
 rename superset/{databases/commands => commands/database}/exceptions.py (100%)
 rename superset/{databases/commands => commands/database}/export.py (98%)
 rename superset/{databases/commands => commands/database}/importers/__init__.py (100%)
 rename superset/{databases/commands => commands/database}/importers/dispatcher.py (97%)
 rename superset/{databases/commands => commands/database}/importers/v1/__init__.py (91%)
 rename superset/{databases/commands => commands/database}/importers/v1/utils.py (100%)
 rename superset/{databases/ssh_tunnel/commands => commands/database/ssh_tunnel}/__init__.py (100%)
 rename superset/{databases/ssh_tunnel/commands => commands/database/ssh_tunnel}/create.py (98%)
 rename superset/{databases/ssh_tunnel/commands => commands/database/ssh_tunnel}/delete.py (94%)
 rename superset/{databases/ssh_tunnel/commands => commands/database/ssh_tunnel}/exceptions.py (100%)
 rename superset/{databases/ssh_tunnel/commands => commands/database/ssh_tunnel}/update.py (97%)
 rename superset/{databases/commands => commands/database}/tables.py (98%)
 rename superset/{databases/commands => commands/database}/test_connection.py (98%)
 rename superset/{databases/commands => commands/database}/update.py (96%)
 rename superset/{databases/commands => commands/database}/validate.py (98%)
 rename superset/{databases/commands => commands/database}/validate_sql.py (98%)
 rename superset/{datasets/columns/commands => commands/dataset}/__init__.py (100%)
 rename superset/{datasets/commands => commands/dataset/columns}/__init__.py (100%)
 rename superset/{datasets/columns/commands => commands/dataset/columns}/delete.py (95%)
 copy superset/{datasets/columns/commands => commands/dataset/columns}/exceptions.py (100%)
 rename superset/{datasets/commands => commands/dataset}/create.py (98%)
 rename superset/{datasets/commands => commands/dataset}/delete.py (97%)
 rename superset/{datasets/commands => commands/dataset}/duplicate.py (99%)
 rename superset/{datasets/commands => commands/dataset}/exceptions.py (100%)
 rename superset/{datasets/commands => commands/dataset}/export.py (98%)
 rename superset/{datasets/commands => commands/dataset}/importers/__init__.py (100%)
 rename superset/{datasets/commands => commands/dataset}/importers/dispatcher.py (97%)
 rename superset/{datasets/commands => commands/dataset}/importers/v0.py (90%)
 rename superset/{datasets/commands => commands/dataset}/importers/v1/__init__.py (92%)
 rename superset/{datasets/commands => commands/dataset}/importers/v1/utils.py (99%)
 rename superset/{datasets/metrics/commands => commands/dataset/metrics}/__init__.py (100%)
 rename superset/{datasets/metrics/commands => commands/dataset/metrics}/delete.py (95%)
 rename superset/{datasets/metrics/commands => commands/dataset/metrics}/exceptions.py (100%)
 rename superset/{datasets/commands => commands/dataset}/refresh.py (97%)
 rename superset/{datasets/commands => commands/dataset}/update.py (97%)
 rename superset/{datasets/commands => commands/dataset}/warm_up_cache.py (89%)
 rename superset/{embedded_dashboard/commands => commands/explore}/__init__.py (100%)
 rename superset/{explore/commands => commands/explore/form_data}/__init__.py (100%)
 rename superset/{explore/form_data/commands => commands/explore/form_data}/create.py (91%)
 rename superset/{explore/form_data/commands => commands/explore/form_data}/delete.py (91%)
 rename superset/{explore/form_data/commands => commands/explore/form_data}/get.py (89%)
 rename superset/{explore/form_data/commands => commands/explore/form_data}/parameters.py (100%)
 copy superset/{explore/form_data/commands => commands/explore/form_data}/state.py (100%)
 rename superset/{explore/form_data/commands => commands/explore/form_data}/update.py (93%)
 rename superset/{explore/form_data/commands => commands/explore/form_data}/utils.py (90%)
 rename superset/{explore/commands => commands/explore}/get.py (94%)
 rename superset/{explore/commands => commands/explore}/parameters.py (100%)
 rename superset/{explore/form_data/commands => commands/explore/permalink}/__init__.py (100%)
 rename superset/{explore/permalink/commands => commands/explore/permalink}/base.py (100%)
 rename superset/{explore/permalink/commands => commands/explore/permalink}/create.py (95%)
 rename superset/{explore/permalink/commands => commands/explore/permalink}/get.py (93%)
 rename superset/{explore/permalink/commands => commands/key_value}/__init__.py (100%)
 rename superset/{key_value/commands => commands/key_value}/create.py (100%)
 rename superset/{key_value/commands => commands/key_value}/delete.py (92%)
 rename superset/{key_value/commands => commands/key_value}/delete_expired.py (100%)
 rename superset/{key_value/commands => commands/key_value}/get.py (93%)
 rename superset/{key_value/commands => commands/key_value}/update.py (94%)
 rename superset/{key_value/commands => commands/key_value}/upsert.py (93%)
 rename superset/{key_value/commands => commands/query}/__init__.py (100%)
 rename superset/{queries/saved_queries/commands => commands/query}/delete.py (96%)
 rename superset/{queries/saved_queries/commands => commands/query}/exceptions.py (100%)
 rename superset/{queries/saved_queries/commands => commands/query}/export.py (97%)
 rename superset/{queries/saved_queries/commands => commands/query/importers}/__init__.py (100%)
 rename superset/{queries/saved_queries/commands => commands/query}/importers/dispatcher.py (97%)
 rename superset/{queries/saved_queries/commands => commands/query}/importers/v1/__init__.py (91%)
 copy superset/{queries/saved_queries/commands => commands/query}/importers/v1/utils.py (100%)
 rename superset/{queries/saved_queries/commands/importers => commands/report}/__init__.py (100%)
 rename superset/{reports/commands => commands/report}/alert.py (99%)
 rename superset/{reports/commands => commands/report}/base.py (98%)
 rename superset/{reports/commands => commands/report}/create.py (97%)
 rename superset/{reports/commands => commands/report}/delete.py (97%)
 rename superset/{reports/commands => commands/report}/exceptions.py (100%)
 rename superset/{reports/commands => commands/report}/execute.py (99%)
 rename superset/{reports/commands => commands/report}/log_prune.py (96%)
 rename superset/{reports/commands => commands/report}/update.py (97%)
 rename superset/{reports/commands => commands/security}/__init__.py (100%)
 rename superset/{row_level_security/commands => commands/security}/create.py (100%)
 rename superset/{row_level_security/commands => commands/security}/delete.py (96%)
 rename superset/{row_level_security/commands => commands/security}/exceptions.py (100%)
 rename superset/{row_level_security/commands => commands/security}/update.py (96%)
 rename superset/{row_level_security/commands => commands/sql_lab}/__init__.py (100%)
 rename superset/{sqllab/commands => commands/sql_lab}/estimate.py (100%)
 rename superset/{sqllab/commands => commands/sql_lab}/execute.py (100%)
 rename superset/{sqllab/commands => commands/sql_lab}/export.py (100%)
 rename superset/{sqllab/commands => commands/sql_lab}/results.py (100%)
 rename superset/{sqllab/commands => commands/tag}/__init__.py (100%)
 rename superset/{tags/commands => commands/tag}/create.py (70%)
 rename superset/{tags/commands => commands/tag}/delete.py (94%)
 rename superset/{tags/commands => commands/tag}/exceptions.py (100%)
 rename superset/{tags/commands => commands/tag}/update.py (86%)
 rename superset/{tags/commands => commands/tag}/utils.py (79%)
 rename superset/{tags/commands => commands/temporary_cache}/__init__.py (100%)
 rename superset/{temporary_cache/commands => commands/temporary_cache}/create.py (92%)
 rename superset/{temporary_cache/commands => commands/temporary_cache}/delete.py (92%)
 rename superset/{temporary_cache/commands => commands/temporary_cache}/entry.py (100%)
 rename superset/{temporary_cache/commands => commands/temporary_cache}/exceptions.py (100%)
 rename superset/{temporary_cache/commands => commands/temporary_cache}/get.py (92%)
 rename superset/{temporary_cache/commands => commands/temporary_cache}/parameters.py (100%)
 rename superset/{temporary_cache/commands => commands/temporary_cache}/update.py (92%)
 delete mode 100644 superset/connectors/base/models.py
 delete mode 100644 superset/connectors/base/views.py
 rename superset/daos/{annotation.py => annotation_layer.py} (100%)
 create mode 100644 superset/db_engine_specs/databend.py
 create mode 100644 superset/db_engine_specs/doris.py
 rename superset/{explore/form_data/commands/state.py => db_engine_specs/ibmi.py} (72%)
 delete mode 100644 superset/examples/configs/charts/Filter_Segments.yaml
 delete mode 100644 superset/examples/configs/charts/Filtering_Vaccines.yaml
 delete mode 100644 superset/examples/configs/charts/Vehicle_Sales_Filter.yaml
 delete mode 100644 superset/examples/configs/charts/Video_Game_Sales_Filter.yaml
 rename superset/{datasets/columns/commands/exceptions.py => migrations/versions/2023-12-01_12-03_b7851ee5522f_replay_317970b4400c.py} (61%)
 delete mode 100644 superset/temporary_cache/commands/__init__.py
 create mode 100644 tests/integration_tests/db_engine_specs/elasticsearch_tests.py
 delete mode 100644 tests/integration_tests/migrations/06e1e70058c7_migrate_legacy_area__tests.py
 create mode 100644 tests/unit_tests/common/test_process_time_range.py
 create mode 100644 tests/unit_tests/dao/dataset_test.py
 create mode 100644 tests/unit_tests/db_engine_specs/test_databend.py
 create mode 100644 tests/unit_tests/db_engine_specs/test_doris.py
 rename superset/charts/data/commands/create_async_job_command.py => tests/unit_tests/fixtures/bash_mock.py (53%)
 copy superset/queries/saved_queries/commands/importers/v1/utils.py => tests/unit_tests/migrations/viz/nvd3_area_chart_to_echarts_test.py (54%)
 create mode 100644 tests/unit_tests/migrations/viz/nvd3_bubble_chart_to_echarts_test.py
 rename superset/queries/saved_queries/commands/importers/v1/utils.py => tests/unit_tests/migrations/viz/nvd3_line_chart_to_echarts_test.py (56%)
 copy tests/unit_tests/migrations/viz/{pivot_table_v1_v2_test.py => time_related_fields_test.py} (63%)
 create mode 100644 tests/unit_tests/migrations/viz/utils.py
 create mode 100644 tests/unit_tests/reports/notifications/slack_tests.py
 create mode 100644 tests/unit_tests/scripts/docker_build_push_test.py
 create mode 100644 tests/unit_tests/scripts/tag_latest_release_test.py