From 4fd73878cafea557d94827f34cc591c611ea0aa0 Mon Sep 17 00:00:00 2001
From: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>
Date: Thu, 27 Apr 2023 13:41:58 -0400
Subject: [PATCH] Feature/update cccs main to 2.1.0 add cccs 2.0 (#281)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: add ssh tunneling to dynamic form for Database Connection UI (#22689)
Co-authored-by: Antonio Rivero Martinez <38889534+Antonio-RiveroMartnez@users.noreply.github.com>
Co-authored-by: Antonio Rivero
Co-authored-by: Elizabeth Thompson
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
* chore(dashboard): Log events for download as image (#22793)
* docs: link docker readme in docker config section (#22796)
* chore: Add explicit bidirectional performant relationships for SQLA model (#22413)
* fix: better logic to extract errors on databricks (#22792)
* fix(hive): Regression in #21794 (#22794)
* fix: Unexpected error on simple filter (#22814)
* feat(docker): Build multiple python version images (#22770)
Co-authored-by: Daniel Draper
* fix: allow CSV upload in Other db (#22807)
* chore: Convert direct uses of antd icons to 'Icons' component (#22516)
* fix(sqllab): type error on renderBigIntStr (#22813)
* chore: upgrade react-datetime, react-intersection-observer and react-checkbox-tree (#22585)
* feat(helm): Add ability to customize affinity per deployment (#22827)
* chore(issue templates): discouraging Issues for feature requests (#22617)
* docs(alerts & reports): add, prune, reorganize (#20872)
* chore(tests): Streamline Cypress login to fix fails/flakes (#22844)
* feat: export/import `allow_dml` flag (#22806)
* chore: Migrate /superset/recent_activity// to /api/v1/ (#22789)
* test: Fix act errors in DatasourceControl test (#22845)
* test: Fix act errors in DatabaseModal test (#22846)
* feat: Move cross filters to Dashboard (#22785)
* fix(cpq): Add `schema` to Query.data() payload (#22791)
* fix(Annotation Layers): Error when render options with renamed columns (#22453)
* build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.48.2 to 5.49.0 in /superset-websocket (#22838)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(misc): Spelling (#19678)
Signed-off-by: Josh Soref
Co-authored-by: Josh Soref
* build(deps): bump ua-parser-js from 0.7.31 to 0.7.33 in /docs (#22858)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* docs(cache): update doc strings (#22865)
* chore: migrate react-diff-viewer to react-diff-viewer-continued for react 18 upgrade (#22834)
* chore: upgrade react-table for react 18 upgrade (#22780)
* chore: upgrade react-reverse-portal for react upgrade (#22779)
* chore: removing unnecessary double spaces, a.k.a. "shotgun holes" (#22852)
* fix: Convert TIMESTAMP_* to TIMESTAMP in Snowflake (#22872)
* fix(sqllab): reverts #22695 (#22861)
* feat(ssh_tunnel): Add feature flag to SSH Tunnel API (#22805)
* fix: revert RESTful apis and react view for RLS (#22818)
* chore: deprecate /superset/slice_json/ and /superset/annotation_json/ (#22496)
* chore: add statsd support to base API and refactor (#22887)
* chore: Migrate /superset/queries/ to API v1 (#22611)
* docs: add Skyscanner to users list (#22888)
Co-authored-by: Calum
* feat: Add excel export (#22006)
Co-authored-by: Igor Șincariov
Co-authored-by: EugeneTorap
* build(deps): bump moment from 2.29.2 to 2.29.4 in /docs (#22891)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump underscore from 1.12.0 to 1.12.1 in /superset-frontend (#22892)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore: deprecate /superset/filter/... endpoint, migrate to apiv1 (#22882)
* fix: bump isort to fix pre-commit CI (#22907)
* chore: migrate /sql_json and /results to apiv1 (#22809)
* chore: Localization of superset pt. 2 (#22772)
* fix: edit pyarrow stringify to better handle emojis and accents (#22881)
* fix(sqllab): inconsistent addNewQueryEditor behavior (#21999)
* fix(i18n): greatly optimize Chinese translation (#22036)
* chore: skip puppeteer chromium download (#22623)
* fix(dependency): update cryptography import (#22744)
Co-authored-by: Daniel Draper
* feat: add pyproject.toml file to project (#20291)
* chore(db_engine_specs): clean up column spec logic and add tests (#22871)
* feat: Adds the ECharts Sunburst chart (#22833)
* fix: Time range filter applied on a dashboard is not persisting to the chart explore (#22920)
* fix(fab): Fix regression on FAB dropdowns (#22889)
* chore: migrate @vx/responsive to @visx/responsive for react 18 upgrade (#22815)
* fix: fix warning in ssh tunnel (#22912)
* chore: upgrade packages for react v17 upgrade (#22914)
* chore: upgrade react-router-dom to 5.3.4 (#22878)
* build(deps-dev): bump eslint from 8.32.0 to 8.33.0 in /superset-websocket (#22902)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat(helm): Make Chart.AppVersion default value for image tag (#22854)
* chore: Migrate /superset/tables/* to API v1 (#22501)
* fix(native-filters): Ensure that time range filter loses focus after closing modal (#22937)
* fix: Remove button is broken for metrics on Explore (#22940)
* feat: Enable new dataset creation flow II (#22835)
* fix(datasets): Fix property selection on JSON response (#22944)
* fix: Improve performance of CSV download (#22929)
* test: Clean up AdhocFilterOption test warnings (#22915)
* chore: Bump Flask-AppBuilder constraints (#22927)
* chore(welcome): change default last tab to "all" (#22798)
* fix(explore): Time comparison in Mixed Chart in GENERIC_CHART_AXES not working (#22945)
* chore(superset-ui-chart-controls): refactor pivot and rename operator (#22963)
* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /superset-frontend (#22958)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix(explore): unable to update linked charts (#22896)
* chore(frontend): Spelling (#19676)
Signed-off-by: Josh Soref
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref
* chore: add waitress for win32 platform (#22935)
* fix(datasets): Include expression and description in duplicated dataset columns (#22943)
* feat: add tabs to edit dataset page (#22043)
Co-authored-by: AAfghahi <48933336+AAfghahi@users.noreply.github.com>
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
Co-authored-by: lyndsiWilliams
* docs: add Caizin to the user list (#22961)
* test: Fix act errors in DatabaseList test (#22970)
* test: Clean up QueryList test warnings (#22972)
* fix(native-filters): Don't include description icon in truncation calc (#22941)
* fix: Prevents last temporal filter removal (#22982)
* fix(explore): Mark time range dashboard filter with warning icon (#22984)
* docs(alerts & reports): clarify nature of "-dev" labeled container images (#22988)
* chore: bump python version to 3.8.16 in Dockerfile (#22934)
* fix: Form data was not being passed to save/update slice (#22989)
* feat(ssh_tunnel): SSH Tunnel Switch extension (#22967)
* chore: Fix grammar (#22831)
* docs: added Orange inside the inthewild.md doc (#22986)
* fix: add new config to allow for specific import data urls (#22942)
* build(deps): bump pre-commit from 2.20.0 to 3.0.4 in /requirements (#22996)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix(explore): Save button incorrectly disabled when adding new metric with dnd (#23000)
* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /docs (#22956)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix: Make cte_alias a property of db engine spec (#22947)
* fix(migrations): Flask-Migrate output is not logged during alembic migrations #17991 (#22991)
* fix(dashboard): export & import chart description and certification details (#22471)
* chore: updating link to sandbox.js (#23005)
* fix(sqllab): clean unwanted scrollbar (#22990)
* chore: Localization of superset pt. 3 (#22938)
Co-authored-by: Evan Rusackas
* chore(deps): bump ajv and react-jsonschema-form in /superset-frontend (#21809)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps-dev): bump eslint-config-prettier from 7.2.0 to 8.6.0 in /superset-websocket (#22767)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 in /superset-frontend/cypress-base (#22955)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps-dev): bump @types/node from 18.11.13 to 18.11.19 in /superset-websocket (#22997)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat(datasets): Populate Usage tab in Edit Dataset view (#22670)
* build(deps-dev): bump @typescript-eslint/parser from 5.48.1 to 5.51.0 in /superset-websocket (#23013)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps-dev): bump typescript from 4.9.4 to 4.9.5 in /superset-websocket (#22933)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(tests): Cypress optimizations to help with fails (#23023)
* chore: refactor SliceAdder for react 17 and react 18 (#23009)
* fix(explore): Enable saving metric after changing title (#23020)
* fix: dataset import error message (#23025)
* fix(ssh_tunnel): Fix bug on database edition for databases with ssh tunnels (#23006)
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
* fix: Handles disabled options on Select All (#22830)
* fix(dashboard): Stop updating chart owners for charts removed from dashboard (#21720)
Co-authored-by: Michael S. Molina
* docs(teradata): fix connection string (#23051)
* fix: Time Column on Generic X-axis (#23021)
* fix: Menu items are not disappearing when deleting a dashboard (#23039)
* fix(i18n): improve Russian translation (#22939)
* fix(sqllab): Invalid schema fetch by deprecated value (#22968)
* chore: Removes icon warnings from tests (#23054)
* feat(sqllab): Add event logger (#23040)
* chore(datasets): Refactor DatasetDAO update to leverage bulk logic for create, update, and delete operations (#22957)
* chore: remove db_engines (#22444)
* feat(helm): allow persisting nodePort for services (#22713)
Signed-off-by: DASTC\gupta_rajan
Co-authored-by: DASTC\gupta_rajan
* build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.49.0 to 5.52.0 in /superset-websocket (#23073)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps): bump hot-shots from 9.3.0 to 10.0.0 in /superset-websocket (#23031)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps-dev): bump prettier from 2.8.3 to 2.8.4 in /superset-websocket (#23030)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps-dev): bump @types/node from 18.11.19 to 18.13.0 in /superset-websocket (#23029)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix: cache warmup solution non legacy charts. (#23012)
* docs: remove duplicate navbar item (#22486)
Signed-off-by: tison
* chore: Migrate get_or_create_table endpoint to api v1 (#22931)
* chore: Migrate /superset/csv/ to API v1 (#22913)
* fix: css template permissions for gamma role (#23083)
* build(deps): bump ws from 8.12.0 to 8.12.1 in /superset-websocket (#23080)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* build(deps-dev): bump eslint from 8.33.0 to 8.34.0 in /superset-websocket (#23079)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(style): make brand icon max width customizable (#23081)
* chore: Remove dependency warnings from SqlEditorLeftBar/index.tsx (#22975)
* chore: Remove dependency warnings from SqlEditor/index.jsx (#22974)
* chore: Remove dependency warnings from DatasetList.tsx (#22973)
* test: Convert DatasetList test from jsx to tsx (#22971)
* test: Clean up SelectAsyncControl test warnings (#22969)
* chore: move dashboard screenshot standalone logic (#23003)
* fix: dict bug on QueryContextFactory (#23093)
Co-authored-by: ok9897
* chore: Improve greeting message (#23077)
* chore: Updating connection URI for MS SQL Server (#22903)
Co-authored-by: Evan Rusackas
* chore: increment statsd as warn (#23041)
* fix: removing pyproject.toml (#23101)
* chore: change AlertQueryError to 400 (#23102)
* fix: missing __init__ on module sqllab commands (#23107)
* updating package json
* post merge fixes
* [cccs-2.0] updating docker file (#188)
* [CLDN-1565] Fixing bugs (#189)
* [CLDN-1565] Fixing bugs
* removing uneeded import
* Feature/cldn 1565 (#192)
* [CLDN-1565] Fixing bugs
* removing uneeded import
* [CLDN-1565] Adding new image
* Feature/cldn 1609 (#195)
* Add row number option to CCCS-Grid (#181)
* Add row number option to CCCS-Grid
* Have row numbers show by default
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
* Use new build agent (#187)
* Use new build agent
* Remove quotes
* Display datahub link for datasets with defined URN (#177)
* Display datahub link for datasets with defined URN
* Add datahub SVG
* Reorder imports
* Add datahub link to dashboards
* Convert to camel case
* Add tests for DatasetList
* Add tests for dashboard header
* Provide explanation for empty catch
* [CLDN-1540] Added ability for multiple user emails to be filtered on at once
* [CLDN-1540] temp update to docker image tag so that we can deploy code changes to PB-stg
* [CLDN-1540] revert of temp update to docker image tag so that we can deploy code changes to PB-stg
* Add path to url (#193)
* [CLDN-1609] Fixing post merge build errors
* Update cccs-build/superset-base/azure-pipelines.yml
Co-authored-by: Reese <10563996+reesercollins@users.noreply.github.com>
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-at-a-glance-user-id/src/styles.js
Co-authored-by: Reese <10563996+reesercollins@users.noreply.github.com>
Co-authored-by: Reese <10563996+reesercollins@users.noreply.github.com>
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
* [CLDN-1609] Updating image (#196)
* [CLDN-1620] Making rendering use advanced type (#197)
* updating image (#198)
* [CLDN-1609] Fixing all QA bugs (#201)
* [CLDN-1609] Fixing all QA bugs
* [CLDN-1609] Fixing build errors
* [CLDN-1609] adding additional fixes
* [CLDN-1609] Removing log files
* [CLDN-1609] Fixing build error
Co-authored-by: reesercollins <10563996+reesercollins@users.noreply.github.com>
* Feature/cldn 1541 (#200)
* [CLDN-1541] Added the ability to filter on multiple user ID's and IP's at the same time in the Application Links custom viz
* Temp update to image for deploying to PB-stg
* Reverting change to image
* [CLDN-1541] Added a tooltip to the Alfred icon
* Temp update to base image
* Reverting temporary change to image tag
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-application-links/src/ApplicationLinks.tsx
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-application-links/src/ApplicationLinks.tsx
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
* [CLDN-1541] Changed the logic around creating the proper links/URL
* Temp update to img
* Undo temp img change
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
* [CLDN-1609] Updating docker image (#202)
* [cccs-2.0] Fixing case sensitivity (#203)
* [cccs-2.0] Fixing case sensitivity
* [cccs-2.0] Pusing temp image
* [cccs-2.0] fixing two order bys
* [cccs-2.0] fixing verbose names, fixing sizing, fixing ordering
* [cccs-2.0] fixing build error
* [cccs-2.0] updating image
* [cccs-2.0] fixing time columns
* [cccs-2.0] Fixing build errors
* [cccs-2.0] updating docker file
* [cccs-2.0] Fixing time column to populate default time col
* Fixing default time col
* [cccs-2.0] updating image
* Fix issue where datasets without a date/datetime column would not load in the explore view
* Time column dropdown list is now properly populated with either the default temporal column, or the first temporal column (if a default is not set)
* Temp update to base image tag
* Fixed the bug where when there are no dttm columns, the non-dttm columns were being displayed
* Temp update to base image tag
* Reverting changes to the img
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
* Fix/cccs 2.0 (#204)
* [cccs-2.0] Fixing case sensitivity
* [cccs-2.0] Pusing temp image
* [cccs-2.0] fixing two order bys
* [cccs-2.0] fixing verbose names, fixing sizing, fixing ordering
* [cccs-2.0] fixing build error
* [cccs-2.0] updating image
* [cccs-2.0] fixing time columns
* [cccs-2.0] Fixing build errors
* [cccs-2.0] updating docker file
* [cccs-2.0] Fixing time column to populate default time col
* Fixing default time col
* [cccs-2.0] updating image
* Fix issue where datasets without a date/datetime column would not load in the explore view
* Time column dropdown list is now properly populated with either the default temporal column, or the first temporal column (if a default is not set)
* Temp update to base image tag
* Fixed the bug where when there are no dttm columns, the non-dttm columns were being displayed
* Temp update to base image tag
* Reverting changes to the img
* Updating image tag
Co-authored-by: cccs-RyanS <71385290+cccs-RyanS@users.noreply.github.com>
* Fixed issue with Typescript (#205)
* Fix cccs 2.0 (#206)
* Fixed issue with Typescript
* Update image tag
* Feature/cldn 1563 (#207)
* Ran pre-commit hook on the front-end
* Removed unused file & removed duplicate method
* Made changes so that the pre-commit hook would pass all tests
* Temp update to build img
* revert temp change to build img
* Updated image (#208)
* [CLDN-1683] Added code to show column descriptions as tooltips in the… (#209)
* [CLDN-1683] Added code to show column descriptions as tooltips in the Hogwarts Table custom visualisation
* [CLDN-1683] Temp update to build image
* [CLDN-1683] Revert update to image tag
* Feature/cldn 1676 (#210)
* [CLDN-1676] Added ability to search for the IPv4 rendered value of an IP address instead of the raw value
* [CLDN-1676] Temp update to img for deploying to UDev
* [CLDN-1676] Undo temp update to img for deploying to UDev
* Updating Superset Base Image Tag (#211)
* added adhoc filter plugin files
* Made sure that adhoc filter uses the adhoc filter object
* added adhocfiltercontrol to native adhoc filter
* fixed hook that made too many requests
* fixed applied filter label
* removed duplicate files
* Removed uneeded functions
* Removed uneeded functions and variables
* Removed unused props variables
* modifying base image tag
* Removed unused config settings
* removed column for filter config form
* Improved the applied filter(s) modal
* Temp update to build image
* fixed string formatting issue:
* updating superset base image tag
* added setFocused hooks to filter when hovering
* Fixed the right click to emit dashboard cross-filters (#213)
* Fixed the right click to emit filters through the context menu as it was not working
* Temp update to build image
* Revert temp update to build image
* Updated superset base image (#214)
* fixed unused declaration error
* updating image
* Prevent invalid filter values from being saved (#215)
By assuming that all input is invalid until the api tells us otherwise,
we can prevent the user from clicking the save button in the time between
the value being entered and the api returning.
* [cccs-2.0] fixing trino req (#216)
* updating superset-base image tag
* added option to emit a filter from a default column for a row in ag grid
* Update trino python client (#219)
* Updated trino python client from 0.316.0 to 0.318.0
* Temp update to base image tag
* Removing temp change to build image
* Updated superset's base image tag (#221)
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/CccsGrid.tsx
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
* changed control panel to plural
* disallow columns that are not a part of the chart to be selected as default emit filters
* updated image tag
* updated control panel logic for agg mode
* update image tag
* fixed issues
* updating base image
* fixed refactor error
* updating base image
* fixed so that option disables properly
* updating base image
* Add users API to get and delete users (#223)
* Add users API to get and delete users
* Allow browser login for users api
* updating image
* Update cccs-build/superset/Dockerfile
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
* Added ability to certify entities with multiple values (#224)
* Added ability to certify entities with multiple values
* Update description text to reflect new feature
* Add tests for multiple certified by values
* Feature/cldn 1749 (#222)
* [CLDN-1749] adding new viz
* chanigng to work with standard filters
* Adding generic filter extraction
* Removing unused imports
* [CLDN-1749] Cleaning up code for reusablility
* [CLDN-1749] removing unused files
* [CLDN-1746] fixing case
* [CLDN-1749] adding parameter validation
* [CLDN-1749] adding error message and prefix parameter
* [CLDN-1749] removing unused files
* [CLDN-1749] adding temp base image for docker deployment
* [CLDN-1749] Better error handling and new icon
* [CLDN-1749] remove unused imports
* temp dockerfile change
* [CLDN-1749] Adding the adhoc filters back in
* [CLDN-1749] Updating image
* [CLDN-1749] Adding new thumbnail
* Updating dockerfile
* [CLDN-1749] Removing uneeded control panel elements
* [CLDN-1749] Fixing build errors
* [CLDN-1749] New image
* Change to use data from dataset
* Removing unsed function
* Fixing typos
* renove unused import
* updating image
* error message and label fixes
* updating image
* Update cccs-build/superset/Dockerfile
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-iframe/src/plugin/transformProps.ts
Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-iframe/src/plugin/transformProps.ts
Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>
* Prevent non-admins from using users api (#236)
* Prevent non-admins from using users api
* Add tests
* added styles to highlight adhoc filter when focused and fix awkward empty header
* removed suggestions from popping up
* added comment
* fixed unused import error
* updating base image
* Update Dockerfile
* [CLDN-1829] fixing principle filter logic with state (#234) (#244)
* [CLDN-1829] fixing principle filter logic with state
* [CLDN-1829] Fixing build error
* [cccs-2.0] Updating image (#245)
* value set to empty list instead of undefined
* updating base image
* Feature/cldn 1748 (#243)
* [CLDN-1748] adding base component
* [CLDN-1748] changing state to use advanced data type
* [CLDN-1748] add multi select for musiness type
* [CLDN-1748] adding config manager
* [CLDN-1748] fixing build errors
* temp update of base image
* [CLDN-1748] Fixing Url parameter encoding and show name of dashboard drilling to
* temp update of image
* Pulling extra data from dashboard endpoint
* Adding more data to filters object
* [CLDN-1748] passing mroe fitler information
* [CLDN-1748] QA feedback
* [CLDN-1748] Fixing build issues
* [CLDN-1748] Updating dockerfile
* [CLDN-1748] Updating dockerfile
* fixing props name
* update image
* updating docker file
* [CLDN-1748] Name changes
* [CLDN-1748] updating image
* [CLDN-1748] Adding icon
* [CLDN-1748] fixing build errors
* [CLDN-1748] update image
* [CLDN-1748] fixing context menue to renderering
* UPdating docker file
* CLDN-1710 including schema in search columns for datasets api (#253)
* Update Dockerfile
* CLDN-1710 tag update (#255)
* update image tag
* updating image tag
* Update vault image to get new CAs
* update image tag
* Update Dockerfile
* Update Dockerfile
* Feature/cldn 1773 (#269)
* [CLDN-1773] Adding default group by
* Updating DockerFile
* Fixing Groupby
* Updating base image
* [CLDN-1773] Saving Group by order
* Updating dockerfile
* Update controlPanel.tsx
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts
Co-authored-by: cccs-tom <59839056+cccs-tom@users.noreply.github.com>
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts
Co-authored-by: cccs-tom <59839056+cccs-tom@users.noreply.github.com>
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/plugin/transformProps.ts
Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>
---------
Co-authored-by: cccs-tom <59839056+cccs-tom@users.noreply.github.com>
Co-authored-by: cccs-RyanK <102618419+cccs-RyanK@users.noreply.github.com>
* Updating docker file (#270)
* Feature/cldn 1968 (Display JSON data inline) (#268)
* Add buttons to expand and minimize JSON data as well as ability to expand and/or collapse all rows in a certain column
* [CLDN-1968] Added expand button for full row
* [CLDN-1968] Resize JSON columns
* [CLDN-1968] Added new array which tracks JSON cell state
* Revert "[CLDN-1968] Added new array which tracks JSON cell state"
This reverts commit dabc3daee96cfbe39d9615837076e54736e518b6.
* [CLDN-1968] Added ability for row level expand all button to track if cells are expanded or not
* [CLDN-1968] Ran pre-commit hook
* [CLDN-1968] Improved UI
* [CLDN-1968] Update image tag for testing
* [CLDN-1968] Revert image tag for testing
* [CLDN-1968] Added multiple UI/UX changes based on QA feedback
* [CLDN-1968] Added more UI/UX changes based on QA feedback
* [CLDN-1968] Temp change to image
* Revert "[CLDN-1968] Temp change to image"
This reverts commit 57490bd71dbf14499f08e21e691933d6bbaf914d.
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/CccsGrid.tsx
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
* [CLDN-1968] Remove 'TODO's as they are no longer needed
* [CLDN-1968] Changed a variable name, and condensed a few lines
* [CLDN-1968] Modified a setState so that only one is needed instead of 2
---------
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
* Feature/cldn 1968 (#272)
* Add buttons to expand and minimize JSON data as well as ability to expand and/or collapse all rows in a certain column
* [CLDN-1968] Added expand button for full row
* [CLDN-1968] Resize JSON columns
* [CLDN-1968] Added new array which tracks JSON cell state
* Revert "[CLDN-1968] Added new array which tracks JSON cell state"
This reverts commit dabc3daee96cfbe39d9615837076e54736e518b6.
* [CLDN-1968] Added ability for row level expand all button to track if cells are expanded or not
* [CLDN-1968] Ran pre-commit hook
* [CLDN-1968] Improved UI
* [CLDN-1968] Update image tag for testing
* [CLDN-1968] Revert image tag for testing
* [CLDN-1968] Added multiple UI/UX changes based on QA feedback
* [CLDN-1968] Added more UI/UX changes based on QA feedback
* [CLDN-1968] Temp change to image
* Revert "[CLDN-1968] Temp change to image"
This reverts commit 57490bd71dbf14499f08e21e691933d6bbaf914d.
* Update superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/CccsGrid.tsx
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
* [CLDN-1968] Remove 'TODO's as they are no longer needed
* [CLDN-1968] Changed a variable name, and condensed a few lines
* [CLDN-1968] Modified a setState so that only one is needed instead of 2
* Update superset base image
---------
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
* post merge fixes
* updating package lock
* fix npm install
* npm fixes
* updating base image tag
* fixed typing extensions version
* grabbing cldn 2076 changes
* fixed dev version number
* updating base image
---------
Signed-off-by: dependabot[bot]
Signed-off-by: Josh Soref
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Signed-off-by: DASTC\gupta_rajan
Signed-off-by: tison
Co-authored-by: Hugh A. Miles II
Co-authored-by: Antonio Rivero Martinez <38889534+Antonio-RiveroMartnez@users.noreply.github.com>
Co-authored-by: Antonio Rivero
Co-authored-by: Elizabeth Thompson
Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
Co-authored-by: JUST.in DO IT
Co-authored-by: ʈᵃᵢ
Co-authored-by: John Bodley <4567245+john-bodley@users.noreply.github.com>
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
Co-authored-by: Daniel Draper
Co-authored-by: Daniel Draper
Co-authored-by: Beto Dealmeida
Co-authored-by: Cody Leff
Co-authored-by: Lily Kuang
Co-authored-by: Sergey Shevchenko
Co-authored-by: Evan Rusackas
Co-authored-by: Sam Firke
Co-authored-by: Jack Fragassi
Co-authored-by: Geido <60598000+geido@users.noreply.github.com>
Co-authored-by: Stepan <66589759+Always-prog@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: Josh Soref
Co-authored-by: Cemre Mengu
Co-authored-by: Mayur
Co-authored-by: Diego Medina
Co-authored-by: Daniel Vaz Gaspar
Co-authored-by: cleslie
Co-authored-by: Calum
Co-authored-by: Igor Șincariov <102555782+igorsinc@users.noreply.github.com>
Co-authored-by: Igor Șincariov
Co-authored-by: EugeneTorap
Co-authored-by: Artem Shumeiko <53895552+artemonsh@users.noreply.github.com>
Co-authored-by: 王一川
Co-authored-by: nisheldo
Co-authored-by: Leo Schick <67712864+leo-schick@users.noreply.github.com>
Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>
Co-authored-by: Arash Afghahi <48933336+AAfghahi@users.noreply.github.com>
Co-authored-by: Denis Krivenko
Co-authored-by: Kamil Gabryjelski
Co-authored-by: Erik Ritter
Co-authored-by: Phillip Kelley-Dotson
Co-authored-by: lyndsiWilliams
Co-authored-by: tejaskatariya <42517374+tejaskatariya@users.noreply.github.com>
Co-authored-by: Adrian
Co-authored-by: alexclavel-ocient <111374753+alexclavel-ocient@users.noreply.github.com>
Co-authored-by: Trey Gilliland
Co-authored-by: Michael S. Molina
Co-authored-by: Rajan Gupta
Co-authored-by: DASTC\gupta_rajan
Co-authored-by: Dheeraj Jaiswal <118437694+dheeraj-jaiswal-lowes@users.noreply.github.com>
Co-authored-by: tison
Co-authored-by: Changhoon Oh <81631424+okayhooni@users.noreply.github.com>
Co-authored-by: ok9897
Co-authored-by: kuruv
Co-authored-by: Zef Lin
Co-authored-by: cccs-RyanS <71385290+cccs-RyanS@users.noreply.github.com>
Co-authored-by: Reese <10563996+reesercollins@users.noreply.github.com>
Co-authored-by: cccs-Dustin <96579982+cccs-Dustin@users.noreply.github.com>
Co-authored-by: cccs-rc <62034438+cccs-rc@users.noreply.github.com>
Co-authored-by: GITHUB_USERNAME
Co-authored-by: cccs-nik <68961854+cccs-nik@users.noreply.github.com>
Co-authored-by: cccs-tom <59839056+cccs-tom@users.noreply.github.com>
---
.github/CODEOWNERS | 8 +-
.github/ISSUE_TEMPLATE/bug_report.md | 2 +-
.github/ISSUE_TEMPLATE/feature_request.md | 14 -
.github/ISSUE_TEMPLATE/sip.md | 8 +-
.github/actions/chart-testing-action | 2 +-
.github/dependabot.yml | 21 +
.github/workflows/bashlib.sh | 11 +-
.github/workflows/caches.js | 2 +
.github/workflows/chromatic-master.yml | 55 +
.github/workflows/docker_build_push.sh | 28 +
.github/workflows/license-check.yml | 51 +
.../{misc.yml => prefer-typescript.yml} | 45 +-
.../workflows/superset-applitool-cypress.yml | 2 +-
.github/workflows/superset-cli.yml | 2 +-
.github/workflows/superset-e2e.yml | 2 +-
.github/workflows/superset-frontend.yml | 5 +
.github/workflows/superset-helm-lint.yml | 1 +
.github/workflows/superset-helm-release.yml | 7 +-
.../superset-python-integrationtest.yml | 6 +-
.github/workflows/superset-python-misc.yml | 19 +-
.../workflows/superset-python-presto-hive.yml | 4 +-
.github/workflows/superset-websocket.yml | 2 +-
.github/workflows/welcome-new-users.yml | 13 +-
.markdownlint.json | 4 +
.pre-commit-config.yaml | 11 +-
.pylintrc | 6 +-
CHANGELOG.md | 619 +
CODE_OF_CONDUCT.md | 2 +-
CONTRIBUTING.md | 55 +-
Dockerfile | 79 +-
Makefile | 16 +-
README.md | 89 +-
RELEASING/Dockerfile.from_local_tarball | 4 +-
RELEASING/Dockerfile.from_svn_tarball | 4 +-
RELEASING/README.md | 22 +-
RELEASING/release-notes-2-0/README.md | 152 +
RELEASING/release-notes-2-0/changelog.md | 491 +
RELEASING/test_run_tarball.sh | 2 +-
RESOURCES/FEATURE_FLAGS.md | 47 +-
RESOURCES/INTHEWILD.md | 22 +
UPDATING.md | 45 +
cccs-build/superset/Dockerfile | 4 +-
cccs-build/superset/requirements.txt | 2 +-
docker-compose-non-dev.yml | 10 +-
docker-compose.yml | 10 +-
docker/.env | 3 +-
docker/.env-non-dev | 3 +-
docker/README.md | 4 +-
docker/docker-bootstrap.sh | 2 +-
docker/docker-frontend.sh | 5 +-
docker/pythonpath_dev/superset_config.py | 13 +-
docs/README.md | 34 +-
docs/docs/contributing/contributing-page.mdx | 2 +-
docs/docs/contributing/testing-locally.mdx | 14 +
docs/docs/contributing/translations.mdx | 6 +-
.../contributing/types-of-contributions.mdx | 8 +-
.../creating-your-first-dashboard.mdx | 2 +-
docs/docs/databases/athena.mdx | 8 +
docs/docs/databases/bigquery.mdx | 4 +-
docs/docs/databases/clickhouse.mdx | 18 +-
docs/docs/databases/databricks.mdx | 5 +-
docs/docs/databases/docker-add-drivers.mdx | 2 +-
docs/docs/databases/druid.mdx | 6 +
docs/docs/databases/dynamodb.mdx | 20 +
docs/docs/databases/elasticsearch.mdx | 8 +
.../databases/installing-database-drivers.mdx | 15 +-
docs/docs/databases/kusto.mdx | 26 +
docs/docs/databases/risingwave.mdx | 17 +
docs/docs/databases/snowflake.mdx | 30 +-
docs/docs/databases/sql-server.mdx | 7 +
docs/docs/databases/teradata.mdx | 2 +-
docs/docs/databases/timescaledb.mdx | 38 +
docs/docs/databases/trino.mdx | 18 +-
docs/docs/frequently-asked-questions.mdx | 10 +-
docs/docs/installation/alerts-reports.mdx | 444 +-
docs/docs/installation/cache.mdx | 79 +-
.../installation/configuring-superset.mdx | 4 +
docs/docs/installation/event-logging.mdx | 4 +-
.../installing-superset-from-scratch.mdx | 2 +-
...stalling-superset-using-docker-compose.mdx | 8 +-
.../installation/running-on-kubernetes.mdx | 31 +-
docs/docs/installation/sql-templating.mdx | 4 +-
docs/docs/intro.mdx | 2 +-
docs/docs/miscellaneous/country-map-tools.mdx | 1 +
docs/docs/security.mdx | 37 +
docs/docusaurus.config.js | 23 +-
docs/src/pages/community.tsx | 7 +-
docs/src/pages/index.tsx | 22 +-
docs/src/resources/data.js | 10 +
docs/static/img/applitools.png | Bin 0 -> 3658 bytes
docs/static/img/dashboard.jpg | Bin 0 -> 128565 bytes
docs/static/img/dashboard3.png | Bin 728491 -> 0 bytes
docs/static/img/databases/databricks.png | Bin 0 -> 20293 bytes
docs/static/img/databases/timescale.png | Bin 0 -> 16120 bytes
docs/static/img/explore.jpg | Bin 0 -> 150805 bytes
docs/static/img/explorer5.jpg | Bin 314853 -> 0 bytes
docs/static/img/sql_lab.jpg | Bin 0 -> 117310 bytes
docs/static/img/sqllab5.jpg | Bin 345510 -> 0 bytes
docs/static/resources/openapi.json | 3600 +-
docs/static/script/matomo.js | 36 +
docs/yarn.lock | 562 +-
helm/superset/Chart.lock | 9 +
helm/superset/Chart.yaml | 27 +-
helm/superset/README.md | 267 +
helm/superset/README.md.gotmpl | 44 +
helm/superset/templates/_helpers.tpl | 6 -
.../templates/configmap-superset.yaml | 1 +
helm/superset/templates/deployment-beat.yaml | 71 +-
.../superset/templates/deployment-flower.yaml | 157 +
.../superset/templates/deployment-worker.yaml | 94 +-
helm/superset/templates/deployment-ws.yaml | 153 +
helm/superset/templates/deployment.yaml | 78 +-
helm/superset/templates/ingress.yaml | 16 +-
helm/superset/templates/init-job.yaml | 17 +-
helm/superset/templates/secret-env.yaml | 1 +
.../templates/secret-superset-config.yaml | 1 +
helm/superset/templates/secret-ws.yaml | 32 +
helm/superset/templates/service-account.yaml | 4 +
helm/superset/templates/service.yaml | 70 +
helm/superset/values.schema.json | 607 -
helm/superset/values.yaml | 514 +-
lintconf.yaml | 8 +-
requirements/base.txt | 95 +-
requirements/development.txt | 12 +-
requirements/docker.txt | 4 +-
requirements/integration.txt | 42 +-
requirements/testing.txt | 69 +-
scripts/babel_update.sh | 2 +-
scripts/cancel_github_workflows.py | 2 +-
scripts/generate_frontend_ts_tasklist.js | 4 +-
scripts/permissions_cleanup.py | 12 +-
scripts/python_tests.sh | 2 +-
scripts/tests/run.sh | 2 +-
setup.cfg | 8 +-
setup.py | 85 +-
superset-embedded-sdk/README.md | 7 +-
superset-embedded-sdk/package-lock.json | 221 +-
superset-embedded-sdk/package.json | 5 +-
superset-embedded-sdk/src/const.ts | 4 +
.../src/guestTokenRefresh.ts | 3 +-
superset-embedded-sdk/src/index.ts | 39 +-
superset-frontend/.eslintrc.js | 2 +
superset-frontend/.storybook/main.js | 5 +-
superset-frontend/.storybook/preview.jsx | 26 +-
superset-frontend/babel.config.js | 15 +-
.../cypress-base/applitools.config.js | 3 +-
superset-frontend/cypress-base/cypress.json | 2 +-
.../cypress-base/cypress/fixtures/charts.json | 42 +
.../cypress/fixtures/dashboards.json | 46 +
.../cypress/fixtures/example.json | 5 -
.../alerts_and_reports/alerts.test.ts | 37 +-
.../alerts_and_reports/reports.test.ts | 37 +-
.../integration/chart_list/card_view.test.ts | 129 -
.../chart_list/chartlist.applitools.test.ts | 7 +-
.../integration/chart_list/filter.test.ts | 123 +-
.../integration/chart_list/list.test.ts | 294 +
.../integration/chart_list/list_view.test.ts | 73 -
...ontrols.test.ts => _skip.controls.test.ts} | 13 +-
.../{filter.test.ts => _skip.filter.test.ts} | 14 +-
..._value.test.ts => _skip.key_value.test.ts} | 13 +-
...arams.test.ts => _skip.url_params.test.ts} | 15 +-
.../integration/dashboard/actions.test.js | 44 +
.../dashboard/dashboard.applitools.test.ts | 9 +-
.../integration/dashboard/dashboard.helper.ts | 209 -
.../dashboard/drilltodetail.test.ts | 612 +
.../integration/dashboard/edit_mode.test.js | 97 -
.../dashboard/edit_properties.test.ts | 204 -
.../integration/dashboard/editmode.test.ts | 803 +
.../integration/dashboard/fav_star.test.js | 63 -
.../integration/dashboard/load.test.ts | 19 +-
.../integration/dashboard/markdown.test.ts | 72 -
.../dashboard/nativeFilters.test.ts | 1426 +-
.../integration/dashboard/save.test.js | 160 -
.../integration/dashboard/tabs.test.ts | 113 +-
.../{nativeFilter.helper.ts => utils.ts} | 247 +-
.../dashboard_list/card_view.test.ts | 124 -
.../dashboardlist.applitools.test.ts | 7 +-
.../integration/dashboard_list/filter.test.ts | 86 +-
.../integration/dashboard_list/list.test.ts | 244 +
.../dashboard_list/list_view.test.ts | 61 -
.../integration/database/modal.test.ts | 26 +-
.../integration/dataset/dataset_list.test.ts | 42 +
.../integration/explore/AdhocMetrics.test.ts | 1 -
...ers.test.ts => _skip.AdhocFilters.test.ts} | 13 +-
.../explore/advanced_analytics.test.ts | 12 +-
.../integration/explore/annotations.test.ts | 1 -
.../cypress/integration/explore/chart.test.js | 107 +-
.../integration/explore/control.test.ts | 108 +-
.../explore/explore.applitools.test.ts | 3 +-
.../integration/explore/filter_box.test.js | 3 +-
.../cypress/integration/explore/link.test.ts | 6 +-
.../cypress/integration/explore/utils.ts | 91 +
.../explore/visualizations/area.test.js | 59 +-
.../explore/visualizations/big_number.test.js | 15 +-
.../visualizations/big_number_total.test.js | 9 +-
.../explore/visualizations/box_plot.test.js | 24 +-
.../explore/visualizations/bubble.test.js | 55 +-
.../explore/visualizations/compare.test.js | 27 +-
.../explore/visualizations/dist_bar.test.js | 40 +-
.../visualizations/download_chart.test.js | 5 +-
.../explore/visualizations/dual_line.test.js | 29 +-
.../explore/visualizations/gauge.test.js | 29 +-
.../explore/visualizations/graph.test.ts | 24 +-
.../explore/visualizations/histogram.test.ts | 28 +-
.../explore/visualizations/line.test.ts | 61 +-
.../explore/visualizations/pie.test.js | 24 +-
.../visualizations/pivot_table.test.js | 13 +-
.../explore/visualizations/sankey.test.js | 28 +-
.../explore/visualizations/shared.helper.js | 4 +-
.../explore/visualizations/sunburst.test.js | 24 +-
.../explore/visualizations/table.test.ts | 17 +-
.../explore/visualizations/time_table.js | 15 +-
.../explore/visualizations/treemap.test.js | 25 +-
.../explore/visualizations/world_map.test.js | 23 +-
...est.js => _skip.sourcePanel.index.test.js} | 5 +-
.../cypress/integration/sqllab/query.test.ts | 63 +-
.../sqllab/sqllab.applitools.test.ts | 1 -
.../cypress/integration/sqllab/tabs.test.ts | 67 +-
.../cypress/support/directories.ts | 19 +-
.../cypress-base/cypress/support/index.d.ts | 32 +-
.../cypress-base/cypress/support/index.ts | 297 +-
.../cypress-base/cypress/utils/index.ts | 106 +
.../cypress-base/cypress/utils/urls.ts | 30 +
.../cypress-base/package-lock.json | 77 +-
superset-frontend/cypress-base/package.json | 1 +
superset-frontend/jest.config.js | 2 +-
superset-frontend/package-lock.json | 37898 ++++++++--------
superset-frontend/package.json | 109 +-
.../plugin-chart/templates/src/MyChart.erb | 2 +-
.../templates/src/plugin/controlPanel.erb | 4 +-
.../packages/generator-superset/package.json | 38 +-
.../superset-ui-chart-controls/package.json | 4 +-
.../src/components/labelUtils.tsx | 12 +-
.../src/constants.ts | 1 -
.../src/fixtures.ts | 149 +
.../superset-ui-chart-controls/src/index.ts | 12 +-
.../src/operators/pivotOperator.ts | 16 +-
.../src/operators/prophetOperator.ts | 12 +-
.../src/operators/renameOperator.ts | 26 +-
.../src/operators/sortOperator.ts | 42 +-
.../src/operators/timeCompareOperator.ts | 4 +-
.../src/operators/timeComparePivotOperator.ts | 15 +-
.../src/operators/utils/isDerivedSeries.ts | 4 +-
.../src/operators/utils/isTimeComparison.ts | 4 +-
.../src/sections/advancedAnalytics.tsx | 67 +-
.../src/sections/chartTitle.tsx | 9 +-
.../src/sections/echartsTimeSeriesQuery.tsx | 60 +
.../src/sections/forecastInterval.tsx | 24 +-
.../src/sections/index.ts | 1 +
.../src/sections/sections.tsx | 24 +-
.../ColumnConfigControl.tsx | 17 -
.../ColumnConfigControl/constants.tsx | 28 +-
.../src/shared-controls/customControls.tsx | 122 +
.../src/shared-controls/dndControls.tsx | 195 +-
.../src/shared-controls/index.ts | 25 +
.../src/shared-controls/index.tsx | 603 -
.../src/shared-controls/mixins.tsx | 121 +
.../src/shared-controls/sharedControls.tsx | 409 +
.../superset-ui-chart-controls/src/types.ts | 90 +-
.../src/utils/D3Formatting.ts | 7 +
.../src/utils/expandControlConfig.tsx | 5 +-
.../src/utils/getStandardizedControls.ts | 68 +
.../src/utils/getTemporalColumns.ts | 77 +
.../src/utils/index.ts | 2 +
.../test/operators/pivotOperator.test.ts | 61 +-
.../test/operators/prophetOperator.test.ts | 3 +-
.../test/operators/renameOperator.test.ts | 35 +-
.../operators/rollingWindowOperator.test.ts | 4 +-
.../test/operators/sortOperator.test.ts | 121 +-
.../operators/timeCompareOperator.test.ts | 6 +-
.../timeComparePivotOperator.test.ts | 50 +-
.../operators/utils/isDerivedSeries.test.ts | 18 +-
.../test/types.test.ts | 9 -
.../test/utils/columnChoices.test.tsx | 4 +-
.../utils/getStandardizedControls.test.ts | 82 +
.../test/utils/getTemporalColumns.test.ts | 104 +
.../packages/superset-ui-core/package.json | 1 +
.../superset-ui-core/src/api/types/core.ts | 31 +
.../chart/components/FallbackComponent.tsx | 5 +-
.../src/chart/components/SuperChart.tsx | 14 +-
.../src/chart/components/SuperChartCore.tsx | 3 +-
.../src/chart/models/ChartMetadata.ts | 5 +
.../src/chart/models/ChartProps.ts | 25 +
.../superset-ui-core/src/chart/types/Base.ts | 13 +
.../src/color/CategoricalColorScale.ts | 25 +-
.../src/color/ColorSchemeRegistry.ts | 13 +-
.../src/color/SharedLabelColorSingleton.ts | 148 +-
.../superset-ui-core/src/color/index.ts | 1 +
.../src/connection/SupersetClient.ts | 1 +
.../src/connection/SupersetClientClass.ts | 4 +
.../src/connection/callApi/callApi.ts | 23 +-
.../src/connection/callApi/parseResponse.ts | 19 +-
.../superset-ui-core/src/connection/types.ts | 9 +-
.../src/math-expression/index.ts | 2 +-
.../superset-ui-core/src/models/Registry.ts | 2 +-
.../src/number-format/NumberFormats.ts | 2 +
.../src/query/DatasourceKey.ts | 4 +-
.../src/query/buildQueryContext.ts | 10 +-
.../src/query/buildQueryObject.ts | 29 +-
.../superset-ui-core/src/query/constants.ts | 19 +-
.../src/query/extractExtras.ts | 32 +-
.../src/query/extractTimegrain.ts | 2 +-
.../src/query/getColumnLabel.ts | 4 +-
.../src/query/getMetricLabel.ts | 2 +-
.../superset-ui-core/src/query/getXAxis.ts | 57 +
.../superset-ui-core/src/query/index.ts | 3 +
.../src/query/normalizeOrderBy.ts | 12 +-
.../src/query/normalizeTimeColumn.ts | 84 +
.../src/query/processFilters.ts | 4 -
.../src/query/types/AdvancedAnalytics.ts | 4 +-
.../src/query/types/AnnotationLayer.ts | 3 +-
.../src/query/types/Column.ts | 34 +-
.../src/query/types/Dashboard.ts | 17 +-
.../src/query/types/Datasource.ts | 3 +-
.../src/query/types/Filter.ts | 6 +
.../src/query/types/Metric.ts | 26 +-
.../src/query/types/Operator.ts | 1 +
.../src/query/types/PostProcessing.ts | 14 +-
.../superset-ui-core/src/query/types/Query.ts | 154 +-
.../src/query/types/QueryFormData.ts | 34 +-
.../src/query/types/QueryResponse.ts | 1 +
.../superset-ui-core/src/query/types/Time.ts | 1 -
.../superset-ui-core/src/style/index.tsx | 2 +
.../superset-ui-core/src/translation/index.ts | 2 +-
.../superset-ui-core/src/types/index.ts | 4 +
.../src/ui-overrides/ExtensionsRegistry.ts | 97 +
.../src/ui-overrides/UiOverrideRegistry.ts | 46 -
.../src/ui-overrides/index.tsx | 2 +-
.../src/utils/featureFlags.ts | 70 +-
.../superset-ui-core/src/utils/index.ts | 1 +
.../superset-ui-core/src/utils/isDefined.ts | 2 +-
.../superset-ui-core/src/utils/lruCache.ts | 74 +
.../__mocks__/resize-observer-polyfill.ts | 5 +
.../test/chart/fixtures/formData.ts | 3 +-
.../test/color/CategoricalColorScale.test.ts | 2 +-
.../test/color/ColorSchemeRegistry.test.ts | 16 +
.../color/SharedLabelColorSingleton.test.ts | 121 +-
.../test/connection/SupersetClient.test.ts | 10 +-
.../connection/SupersetClientClass.test.ts | 3 +-
.../test/connection/callApi/callApi.test.ts | 44 +
.../connection/callApi/parseResponse.test.ts | 32 +
.../test/models/Registry.test.ts | 2 +-
.../factories/createD3NumberFormatter.test.ts | 2 +-
.../test/query/DatasourceKey.test.ts | 15 +-
.../test/query/buildQueryContext.test.ts | 53 +-
.../test/query/buildQueryObject.test.ts | 43 +-
.../test/query/extractExtras.test.ts | 3 +-
.../test/query/getAxis.test.ts | 26 +
.../test/query/normalizeOrderBy.test.ts | 8 +-
.../test/query/normalizeTimeColumn.test.ts | 291 +
.../test/query/processFilters.test.ts | 38 +-
.../test/query/types/Column.test.ts | 63 +
.../test/query/types/Dashboard.test.ts | 65 +-
.../test/query/types/Datasource.test.ts} | 32 +-
.../test/query/types/Filter.test.ts | 23 +
.../test/query/types/Metric.test.ts | 88 +
.../test/query/types/PostProcessing.test.ts | 8 +-
...try.test.ts => ExtensionsRegistry.test.ts} | 6 +-
.../test/utils/featureFlag.test.ts | 43 +-
.../test/utils/lruCache.test.ts | 60 +
.../superset-ui-core/types/external.d.ts | 2 +-
.../packages/superset-ui-demo/package.json | 2 +-
.../shared/components/VerifyCORS.tsx | 3 +-
.../Area/stories/controlsShown.tsx | 2 +-
.../Area/stories/expanded.tsx | 2 +-
.../Area/stories/stackedWithBounds.tsx | 4 +-
.../AreaTimeseries/Stories.tsx | 88 +
.../AreaTimeseries/data.ts | 771 +
.../plugin-chart-echarts/Sunburst/Stories.tsx | 57 +
.../plugin-chart-echarts/Sunburst/data.ts | 32 +
.../Timeseries/Stories.tsx | 74 +-
.../Timeseries/confbandData.ts | 329 +
.../Timeseries/stackWithNulls.ts | 36 +
.../PivotTableStories.tsx | 74 +
.../plugin-chart-pivot-table/testData.ts | 126 +
.../plugin-chart-table/birthNames.json | 1 -
.../superset-ui-chart/SuperChartStories.tsx | 2 +-
.../superset-ui-switchboard/package.json | 2 +-
.../superset-ui-switchboard/src/index.ts | 3 +
.../src/switchboard.test.ts | 31 +-
.../src/switchboard.ts | 38 +-
.../src/Calendar.js | 6 +-
.../src/controlPanel.ts | 34 +-
.../src/images/example.jpg | Bin 0 -> 36394 bytes
.../legacy-plugin-chart-calendar/src/index.js | 2 +
.../src/vendor/cal-heatmap.js | 8 +-
.../src/controlPanel.ts | 18 +-
.../Country Map GeoJSON Generator.ipynb | 715 +-
.../src/controlPanel.ts | 6 +
.../src/countries.ts | 44 +
.../src/countries/argentina.geojson | 30 +
.../src/countries/bolivia.geojson | 15 +
.../src/countries/chile.geojson | 22 +
.../src/countries/colombia.geojson | 40 +
.../src/countries/costa rica.geojson | 13 +
.../src/countries/cuba.geojson | 22 +
.../src/countries/dominican republic.geojson | 38 +
.../src/countries/ecuador.geojson | 30 +
.../src/countries/el salvador.geojson | 20 +
.../src/countries/guatemala.geojson | 28 +
.../src/countries/haiti.geojson | 16 +
.../src/countries/honduras.geojson | 24 +
.../src/countries/latvia.geojson | 125 +
.../src/countries/nicaragua.geojson | 23 +
.../src/countries/panama.geojson | 18 +
.../src/countries/papua new guinea.geojson | 28 +
.../src/countries/paraguay.geojson | 24 +
.../src/countries/puerto rico.geojson | 7 +
.../src/countries/saint barthelemy.geojson | 7 +
.../src/countries/saint martin.geojson | 7 +
.../src/countries/turkey.geojson | 87 +
.../src/countries/venezuela.geojson | 32 +
.../src/images/exampleGermany.jpg | Bin 0 -> 31211 bytes
.../src/images/exampleUsa.jpg | Bin 0 -> 85089 bytes
.../src/index.js | 5 +-
.../src/images/example.jpg | Bin 0 -> 85099 bytes
.../src/index.ts | 2 +
.../src/types/external.d.ts | 1 +
.../src/Heatmap.js | 2 +-
.../src/{controlPanel.ts => controlPanel.tsx} | 82 +-
.../src/Histogram.jsx | 2 +-
.../src/controlPanel.ts | 34 +-
.../src/controlPanel.ts | 6 +-
.../legacy-plugin-chart-map-box/package.json | 38 +-
.../src/controlPanel.ts | 59 +-
.../src/ReactParallelCoordinates.jsx | 6 +-
.../src/images/example1.jpg | Bin 0 -> 62434 bytes
.../src/images/example2.jpg | Bin 0 -> 106374 bytes
.../src/index.js | 3 +
.../src/controlPanel.tsx | 92 +-
.../src/images/example.jpg | Bin 0 -> 44054 bytes
.../src/index.js | 2 +
.../src/controlPanel.ts | 17 +-
.../src/images/example.jpg | Bin 0 -> 59676 bytes
.../src/index.js | 4 +-
.../src/controlPanel.tsx | 85 +-
.../src/images/example1.jpg | Bin 0 -> 116296 bytes
.../src/images/example2.jpg | Bin 0 -> 50161 bytes
.../legacy-plugin-chart-rose/src/index.js | 3 +
.../src/SankeyLoop.js | 4 +-
.../src/controlPanel.ts | 11 +-
.../src/Sunburst.js | 8 +-
.../src/controlPanel.ts | 7 +
.../legacy-plugin-chart-treemap/src/index.js | 2 +-
.../src/WorldMap.js | 47 +-
.../src/controlPanel.ts | 14 +-
.../src/index.js | 3 +-
.../src/transformProps.js | 10 +-
.../legacy-preset-chart-deckgl/package.json | 12 +-
.../src/components/PlaySlider.jsx | 4 +-
.../src/layers/Arc/Arc.jsx | 4 +-
.../src/layers/Grid/Grid.jsx | 20 +-
.../src/layers/Grid/controlPanel.ts | 16 +-
.../src/layers/Hex/Hex.jsx | 19 +-
.../src/layers/Hex/controlPanel.ts | 41 +-
.../src/layers/Path/controlPanel.ts | 4 +-
.../src/layers/Polygon/Polygon.jsx | 11 +-
.../src/layers/Polygon/controlPanel.ts | 10 +-
.../src/layers/Scatter/Scatter.jsx | 6 +-
.../src/layers/Scatter/controlPanel.ts | 14 +-
.../src/layers/Screengrid/Screengrid.jsx | 9 +-
.../src/layers/Screengrid/controlPanel.ts | 10 +-
.../src/utilities/Shared_DeckGL.jsx | 42 +-
.../src/utilities/sharedDndControls.jsx | 6 +-
.../src/utils/explore.js | 2 +-
.../src/utils/fitViewport.ts | 2 +-
.../src/utils/time.js | 8 +-
.../src/Area/controlPanel.ts | 6 +-
.../src/Area/index.js | 2 +-
.../src/Bar/controlPanel.ts | 9 +-
.../legacy-preset-chart-nvd3/src/Bar/index.js | 2 +-
.../src/Bubble/controlPanel.ts | 9 +
.../src/Bubble/images/example.jpg | Bin 0 -> 61529 bytes
.../src/Bubble/index.js | 2 +
.../src/Bullet/images/example.jpg | Bin 0 -> 23045 bytes
.../src/Bullet/index.js | 2 +
.../src/Compare/controlPanel.ts | 11 +-
.../src/Compare/images/example.jpg | Bin 0 -> 66360 bytes
.../src/Compare/index.js | 2 +
.../src/DistBar/controlPanel.ts | 15 +-
.../src/DistBar/index.js | 9 +-
.../src/DualLine/images/example.jpg | Bin 0 -> 121614 bytes
.../src/DualLine/index.js | 2 +
.../src/Line/controlPanel.ts | 12 +-
.../src/Line/index.js | 2 +-
.../src/LineMulti/images/example.jpg | Bin 0 -> 223147 bytes
.../src/LineMulti/index.js | 2 +
.../src/NVD3Controls.tsx | 123 +-
.../src/Pie/controlPanel.ts | 22 +-
.../src/TimePivot/controlPanel.ts | 17 +-
.../src/vendor/superset/AnnotationTypes.js | 10 +-
.../src/vendor/superset/exploreUtils.js | 2 +-
.../plugins/plugin-chart-echarts/package.json | 2 +-
.../BigNumber/BigNumberTotal/controlPanel.ts | 11 +-
.../src/BigNumber/BigNumberTotal/index.ts | 3 +-
.../BigNumberTotal/transformProps.ts | 17 +-
.../src/BigNumber/BigNumberViz.tsx | 100 +-
.../BigNumberWithTrendline/buildQuery.ts | 42 +-
.../BigNumberWithTrendline/controlPanel.tsx | 72 +-
.../BigNumber/BigNumberWithTrendline/index.ts | 3 +-
.../BigNumberWithTrendline/transformProps.ts | 47 +-
.../src/BigNumber/types.ts | 60 +-
.../src/BoxPlot/EchartsBoxPlot.tsx | 39 +-
.../src/BoxPlot/buildQuery.ts | 54 +-
.../src/BoxPlot/controlPanel.ts | 114 +-
.../plugin-chart-echarts/src/BoxPlot/index.ts | 2 +-
.../src/BoxPlot/transformProps.ts | 57 +-
.../plugin-chart-echarts/src/BoxPlot/types.ts | 39 +-
.../src/Funnel/EchartsFunnel.tsx | 39 +-
.../src/Funnel/controlPanel.tsx | 31 +-
.../src/Funnel/images/example.jpg | Bin 0 -> 43090 bytes
.../plugin-chart-echarts/src/Funnel/index.ts | 4 +-
.../src/Funnel/transformProps.ts | 57 +-
.../plugin-chart-echarts/src/Funnel/types.ts | 40 +-
.../src/Gauge/EchartsGauge.tsx | 39 +-
.../src/Gauge/buildQuery.ts | 1 -
.../src/Gauge/controlPanel.tsx | 13 +-
.../src/Gauge/images/example1.jpg | Bin 0 -> 56912 bytes
.../src/Gauge/images/example2.jpg | Bin 0 -> 37092 bytes
.../plugin-chart-echarts/src/Gauge/index.ts | 5 +-
.../src/Gauge/transformProps.ts | 31 +-
.../plugin-chart-echarts/src/Gauge/types.ts | 22 +-
.../src/Graph/EchartsGraph.tsx | 56 +-
.../src/Graph/controlPanel.tsx | 9 +-
.../src/Graph/images/example.jpg | Bin 0 -> 57705 bytes
.../plugin-chart-echarts/src/Graph/index.ts | 5 +-
.../src/Graph/transformProps.ts | 27 +-
.../plugin-chart-echarts/src/Graph/types.ts | 17 +-
.../EchartsMixedTimeseries.tsx | 67 +-
.../src/MixedTimeseries/buildQuery.ts | 28 +-
.../src/MixedTimeseries/controlPanel.tsx | 61 +-
.../src/MixedTimeseries/images/example.jpg | Bin 0 -> 65380 bytes
.../src/MixedTimeseries/index.ts | 14 +-
.../src/MixedTimeseries/transformProps.ts | 189 +-
.../src/MixedTimeseries/types.ts | 66 +-
.../src/Pie/EchartsPie.tsx | 39 +-
.../src/Pie/controlPanel.tsx | 31 +-
.../plugin-chart-echarts/src/Pie/index.ts | 2 +-
.../src/Pie/transformProps.ts | 59 +-
.../plugin-chart-echarts/src/Pie/types.ts | 41 +-
.../src/Radar/EchartsRadar.tsx | 39 +-
.../src/Radar/buildQuery.ts | 8 +-
.../src/Radar/controlPanel.tsx | 20 +-
.../src/Radar/images/example1.jpg | Bin 0 -> 68385 bytes
.../src/Radar/images/example2.jpg | Bin 0 -> 66606 bytes
.../plugin-chart-echarts/src/Radar/index.ts | 7 +-
.../src/Radar/transformProps.ts | 34 +-
.../plugin-chart-echarts/src/Radar/types.ts | 35 +-
.../src/Sunburst/EchartsSunburst.tsx | 127 +
.../src/Sunburst/buildQuery.ts | 29 +
.../src/Sunburst/controlPanel.tsx | 205 +
.../src/Sunburst/images/Sunburst1.png | Bin 0 -> 130270 bytes
.../src/Sunburst/images/Sunburst2.png | Bin 0 -> 126313 bytes
.../src/Sunburst/images/thumbnail.png | Bin 0 -> 130270 bytes
.../src/Sunburst/index.ts | 53 +
.../src/Sunburst/transformProps.ts | 381 +
.../src/Sunburst/types.ts | 71 +
.../src/Timeseries/Area/controlPanel.tsx | 68 +-
.../src/Timeseries/Area/index.ts | 11 +-
.../src/Timeseries/EchartsTimeseries.tsx | 73 +-
.../Timeseries/Regular/Bar/controlPanel.tsx | 95 +-
.../src/Timeseries/Regular/Bar/index.ts | 19 +-
.../{ => Regular/Line}/controlPanel.tsx | 73 +-
.../src/Timeseries/Regular/Line/index.ts | 17 +-
.../Regular/Scatter/controlPanel.tsx | 39 +-
.../src/Timeseries/Regular/Scatter/index.ts | 17 +-
.../Regular/{ => SmoothLine}/controlPanel.tsx | 58 +-
.../Timeseries/Regular/SmoothLine/index.ts | 17 +-
.../src/Timeseries/Step/controlPanel.tsx | 64 +-
.../src/Timeseries/Step/index.ts | 17 +-
.../src/Timeseries/buildQuery.ts | 28 +-
.../src/Timeseries/constants.ts | 70 +
.../src/Timeseries/index.ts | 17 +-
.../src/Timeseries/transformProps.ts | 86 +-
.../src/Timeseries/transformers.ts | 9 +-
.../src/Timeseries/types.ts | 82 +-
.../src/Tree/EchartsTree.tsx | 12 +-
.../src/Tree/constants.ts | 16 +
.../src/Tree/controlPanel.tsx | 13 +-
.../src/Tree/transformProps.ts | 20 +-
.../plugin-chart-echarts/src/Tree/types.ts | 34 +-
.../src/Treemap/EchartsTreemap.tsx | 43 +-
.../src/Treemap/constants.ts | 2 +-
.../src/Treemap/controlPanel.tsx | 24 +-
.../plugin-chart-echarts/src/Treemap/index.ts | 8 +-
.../src/Treemap/transformProps.ts | 176 +-
.../plugin-chart-echarts/src/Treemap/types.ts | 34 +-
.../src/components/Echart.tsx | 28 +-
.../plugin-chart-echarts/src/constants.ts | 34 +-
.../plugin-chart-echarts/src/controls.tsx | 58 +-
.../plugin-chart-echarts/src/defaults.ts | 8 +-
.../plugins/plugin-chart-echarts/src/index.ts | 4 +-
.../plugins/plugin-chart-echarts/src/types.ts | 74 +-
.../src/utils/annotation.ts | 20 +-
.../src/utils/eventHandlers.ts | 82 +
.../plugin-chart-echarts/src/utils/series.ts | 34 +-
.../plugin-chart-echarts/src/utils/tooltip.ts | 79 +
.../src/utils/treeBuilder.ts | 88 +
.../test/BigNumber/transformProps.test.ts | 15 +-
.../test/BoxPlot/buildQuery.test.ts | 3 +-
.../test/Gauge/buildQuery.test.ts | 6 +-
.../test/Graph/transformProps.test.ts | 49 +-
.../test/MixedTimeseries/buildQuery.test.ts | 204 +-
.../test/Timeseries/buildQuery.test.ts | 183 +-
.../test/Tree/transformProps.test.ts | 11 +-
.../test/utils/annotation.test.ts | 31 +-
.../test/utils/series.test.ts | 13 +
.../test/utils/treeBuilder.test.ts | 274 +
.../plugin-chart-handlebars/package.json | 9 +-
.../Handlebars/HandlebarsViewer.tsx | 7 +-
.../plugin-chart-handlebars/src/consts.ts | 5 +-
.../plugin-chart-handlebars/src/i18n.ts | 65 -
.../src/images/example1.jpg | Bin 0 -> 97899 bytes
.../src/images/example2.jpg | Bin 0 -> 294384 bytes
.../src/plugin/buildQuery.ts | 3 -
.../src/plugin/controlPanel.tsx | 15 +-
.../src/plugin/controls/columns.tsx | 4 +-
.../src/plugin/controls/metrics.tsx | 2 +-
.../src/plugin/index.ts | 5 +-
.../plugin-chart-handlebars/src/types.ts | 1 -
.../test/plugin/buildQuery.test.ts | 2 +-
.../test/plugin/transformProps.test.ts | 4 +-
.../types/external.d.ts | 2 +
.../plugin-chart-pivot-table/package.json | 3 +-
.../src/PivotTableChart.tsx | 65 +-
.../src/images/example.jpg | Bin 0 -> 66959 bytes
.../src/plugin/buildQuery.ts | 38 +-
.../src/plugin/controlPanel.tsx | 98 +-
.../src/plugin/index.ts | 6 +-
.../src/plugin/transformProps.ts | 9 +-
.../src/react-pivottable/PivotTable.jsx | 5 +-
.../src/react-pivottable/Styles.js | 8 +-
.../src/react-pivottable/TableRenderers.jsx | 28 +-
.../src/react-pivottable/utilities.js | 12 +-
.../plugin-chart-pivot-table/src/types.ts | 10 +-
.../test/plugin/transformProps.test.ts | 3 +-
.../types/external.d.ts | 2 +
.../plugins/plugin-chart-table/package.json | 9 +-
.../src/DataTable/DataTable.tsx | 19 +-
.../DataTable/components/SelectPageSize.tsx | 5 +-
.../src/DataTable/hooks/useSticky.tsx | 25 +-
.../plugins/plugin-chart-table/src/Styles.tsx | 11 +
.../plugin-chart-table/src/TableChart.tsx | 252 +-
.../plugin-chart-table/src/buildQuery.ts | 28 +-
.../plugin-chart-table/src/controlPanel.tsx | 105 +-
.../plugins/plugin-chart-table/src/index.ts | 2 +-
.../plugin-chart-table/src/transformProps.ts | 11 +-
.../plugins/plugin-chart-table/src/types.ts | 9 +-
.../test/TableChart.test.tsx | 75 +-
.../plugin-chart-word-cloud/package.json | 1 +
.../src/chart/WordCloud.tsx | 5 +-
.../src/plugin/controlPanel.ts | 17 +-
.../src/BoxPlot/controlPanel.ts | 30 +-
.../utils/convertScaleToDataUIScaleShape.ts | 2 +-
.../spec/fixtures/mockChartQueries.js | 24 +-
superset-frontend/spec/fixtures/mockCharts.ts | 55 +
.../spec/fixtures/mockDashboardInfo.js | 3 +
.../spec/fixtures/mockDashboardState.js | 86 +
.../spec/fixtures/mockDatasource.js | 1 -
.../spec/fixtures/mockNativeFilters.ts | 1 +
.../spec/fixtures/mockSliceEntities.js | 22 +-
superset-frontend/spec/fixtures/mockStore.js | 99 +-
.../spec/helpers/reducerIndex.ts | 15 +-
superset-frontend/spec/helpers/setup.ts | 4 +-
superset-frontend/spec/helpers/shim.tsx | 31 +
.../spec/helpers/testing-library.tsx | 33 +-
superset-frontend/src/GlobalStyles.tsx | 33 +
superset-frontend/src/SqlLab/App.jsx | 36 +-
.../src/SqlLab/SqlLabGlobalStyles.tsx | 36 +
.../src/SqlLab/actions/sqlLab.js | 312 +-
.../src/SqlLab/actions/sqlLab.test.js | 330 +-
.../AceEditorWrapper.test.tsx | 98 +
.../components/AceEditorWrapper/index.tsx | 261 +-
.../src/SqlLab/components/App/App.test.jsx | 49 +-
.../src/SqlLab/components/App/index.jsx | 95 +-
.../SqlLab/components/ColumnElement/index.tsx | 8 +-
.../EstimateQueryCostButton.test.tsx | 93 +
.../EstimateQueryCostButton/index.tsx | 49 +-
.../ExploreCtasResultsButton/index.tsx | 33 +-
.../components/ExploreResultsButton/index.tsx | 3 +-
.../QueryAutoRefresh.test.jsx | 68 -
.../QueryAutoRefresh.test.tsx | 133 +
.../components/QueryAutoRefresh/index.jsx | 124 -
.../components/QueryAutoRefresh/index.tsx | 110 +
.../QueryHistory/QueryHistory.test.tsx | 8 -
.../SqlLab/components/QueryHistory/index.tsx | 9 -
.../QueryLimitSelect.test.tsx | 144 +
.../components/QueryLimitSelect/index.tsx | 112 +
.../QuerySearch/QuerySearch.test.jsx | 140 -
.../SqlLab/components/QuerySearch/index.tsx | 292 -
.../QueryStateLabel/QueryStateLabel.test.jsx | 5 +-
.../components/QueryStateLabel/index.tsx | 14 +-
.../components/QueryTable/QueryTable.test.jsx | 2 -
.../SqlLab/components/QueryTable/index.tsx | 67 +-
.../components/ResultSet/ResultSet.test.jsx | 219 -
.../components/ResultSet/ResultSet.test.tsx | 271 +
.../src/SqlLab/components/ResultSet/index.tsx | 628 +-
.../RunQueryActionButton.test.jsx | 53 -
.../RunQueryActionButton.test.tsx | 160 +
.../components/RunQueryActionButton/index.tsx | 35 +-
.../SaveDatasetActionButton.test.tsx | 68 +
.../SaveDatasetActionButton/index.tsx | 85 +
.../SaveDatasetModal.test.tsx | 116 +-
.../components/SaveDatasetModal/index.tsx | 296 +-
.../components/SaveQuery/SaveQuery.test.jsx | 88 -
.../components/SaveQuery/SaveQuery.test.tsx | 225 +
.../src/SqlLab/components/SaveQuery/index.tsx | 154 +-
.../components/ScheduleQueryButton/index.tsx | 24 +-
...ery.test.jsx => ShareSqlLabQuery.test.tsx} | 92 +-
.../components/ShareSqlLabQuery/index.tsx | 35 +-
.../components/SouthPane/SouthPane.test.jsx | 181 +-
.../src/SqlLab/components/SouthPane/index.tsx | 87 +-
.../components/SqlEditor/SqlEditor.test.jsx | 213 +-
.../src/SqlLab/components/SqlEditor/index.jsx | 1051 +-
.../SqlEditorLeftBar.test.jsx | 211 +-
.../components/SqlEditorLeftBar/index.tsx | 188 +-
.../SqlEditorTabHeader.test.tsx | 220 +
.../components/SqlEditorTabHeader/index.tsx | 153 +
...usIcon.test.jsx => TabStatusIcon.test.tsx} | 18 +-
.../SqlLab/components/TabStatusIcon/index.tsx | 54 +-
.../TabbedSqlEditors.test.jsx | 105 +-
.../components/TabbedSqlEditors/index.jsx | 215 +-
.../TableElement/TableElement.test.jsx | 27 +-
.../SqlLab/components/TableElement/index.tsx | 63 +-
.../TemplateParamsEditor.test.tsx | 93 +-
.../components/TemplateParamsEditor/index.tsx | 36 +-
superset-frontend/src/SqlLab/constants.ts | 27 +
superset-frontend/src/SqlLab/fixtures.ts | 195 +-
.../src/SqlLab/hooks/useQueryEditor/index.ts | 38 +
.../useQueryEditor/useQueryEditor.test.ts | 92 +
superset-frontend/src/SqlLab/main.less | 493 -
.../src/SqlLab/reducers/getInitialState.js | 44 +-
.../src/SqlLab/reducers/sqlLab.js | 454 +-
.../src/SqlLab/reducers/sqlLab.test.js | 117 +-
superset-frontend/src/SqlLab/types.ts | 57 +-
.../src/SqlLab/utils/newQueryTabName.test.ts | 6 +-
.../src/SqlLab/utils/newQueryTabName.ts | 4 +-
.../utils/reduxStateToLocalStorageHelper.js | 2 +-
.../src/SqlLab/utils/useInterval.ts | 47 +
.../src/addSlice/AddSliceContainer.test.tsx | 87 -
superset-frontend/src/addSlice/App.tsx | 49 -
.../src/assets/images/apache-kylin.png | Bin 13694 -> 9780 bytes
.../src/assets/images/clickhouse.png | Bin 7651 -> 9841 bytes
.../src/assets/images/databricks.png | Bin 0 -> 11073 bytes
superset-frontend/src/assets/images/db2.png | Bin 9010 -> 7493 bytes
superset-frontend/src/assets/images/druid.png | Bin 12839 -> 11845 bytes
.../src/assets/images/empty-dataset.svg | 38 +
.../src/assets/images/empty-table.svg | 22 +
.../src/assets/images/exasol.png | Bin 8582 -> 8965 bytes
.../src/assets/images/firebird.png | Bin 10895 -> 7953 bytes
.../src/assets/images/firebolt.png | Bin 27249 -> 9061 bytes
.../src/assets/images/google-biquery.png | Bin 16418 -> 15539 bytes
.../src/assets/images/greenplum.png | Bin 17811 -> 18956 bytes
.../src/assets/images/hologres.png | Bin 23843 -> 4529 bytes
.../src/assets/images/mariadb.png | Bin 16770 -> 9663 bytes
.../src/assets/images/monet-db.png | Bin 21830 -> 14327 bytes
.../src/assets/images/mssql-server.png | Bin 21970 -> 10710 bytes
superset-frontend/src/assets/images/mysql.png | Bin 14453 -> 9362 bytes
.../src/assets/images/netezza.png | Bin 54596 -> 8460 bytes
.../src/assets/images/no-columns.svg | 22 +
.../src/assets/images/oracle.png | Bin 8231 -> 8577 bytes
superset-frontend/src/assets/images/pinot.png | Bin 68618 -> 7127 bytes
.../src/assets/images/postgresql.png | Bin 18364 -> 16942 bytes
.../src/assets/images/presto.png | Bin 18505 -> 10865 bytes
.../src/assets/images/redshift.png | Bin 9168 -> 10885 bytes
.../src/assets/images/rockset.png | Bin 23189 -> 8570 bytes
.../src/assets/images/snowflake.png | Bin 21654 -> 15635 bytes
.../src/assets/images/sqlite.png | Bin 11330 -> 10972 bytes
.../src/assets/images/sybase.png | Bin 11992 -> 18309 bytes
.../src/assets/images/teradata.png | Bin 93361 -> 9993 bytes
.../src/assets/images/timescale.png | Bin 16120 -> 15319 bytes
superset-frontend/src/assets/images/trino.png | Bin 23773 -> 10322 bytes
.../src/assets/images/vertica.png | Bin 6800 -> 11479 bytes
.../src/assets/images/yugabyte.png | Bin 6460 -> 12123 bytes
.../src/assets/stylesheets/superset.less | 34 +-
.../plugin-chart-cccs-grid/src/Buttons.css | 31 +
.../plugin-chart-cccs-grid/src/CccsGrid.tsx | 312 +-
.../src/ExpandAllValueRenderer.tsx | 118 +
.../src/JsonValueRenderer.tsx | 132 +-
.../JumpActionConfig.tsx | 386 +-
.../JumpActionConfigControll/index.tsx | 296 +-
.../src/plugin/controlPanel.tsx | 100 +-
.../src/plugin/transformProps.ts | 68 +-
.../plugin-chart-cccs-grid/src/types.ts | 2 +-
.../src/IFrameVisualization.tsx | 32 +-
.../src/plugin/buildQuery.ts | 69 +-
.../src/plugin/controlPanel.ts | 25 +-
.../src/plugin/transformProps.ts | 25 +-
.../src/components/Alert/Alert.test.tsx | 11 +-
.../src/components/AlteredSliceTag/index.jsx | 6 +-
.../AsyncSelect/AsyncSelect.test.jsx | 2 +-
.../src/components/AsyncSelect/index.jsx | 2 +-
.../src/components/Badge/index.tsx | 4 +-
.../src/components/Button/index.tsx | 58 +-
.../CertifiedBadge/CertifiedBadge.test.tsx | 19 +-
.../src/components/Chart/Chart.jsx | 28 +-
.../src/components/Chart/ChartContextMenu.tsx | 152 +
.../src/components/Chart/ChartRenderer.jsx | 135 +-
.../DrillDetail/DrillDetailMenuItems.test.tsx | 345 +
.../DrillDetail/DrillDetailMenuItems.tsx | 255 +
.../DrillDetail/DrillDetailModal.test.tsx | 95 +
.../Chart/DrillDetail/DrillDetailModal.tsx | 118 +
.../DrillDetail/DrillDetailPane.test.tsx | 200 +
.../Chart/DrillDetail/DrillDetailPane.tsx | 397 +
.../DrillDetailTableControls.test.tsx | 109 +
.../DrillDetail/DrillDetailTableControls.tsx | 140 +
.../components/Chart/DrillDetail/index.ts} | 3 +-
.../Chart/DrillDetail}/types.ts | 35 +-
.../src/components/Chart/DrillDetail/utils.ts | 46 +
.../src/components/Chart/chartAction.js | 68 +-
.../src/components/Chart/chartActions.test.js | 38 +
.../src/components/Chart/chartReducer.ts | 8 +-
.../src/components/Chart/utils.test.ts | 42 +
.../src/components/Chart/utils.ts | 40 +
.../src/components/Checkbox/Checkbox.tsx | 9 +-
.../components/ConfirmStatusChange/index.tsx | 2 +-
.../src/components/CopyToClipboard/index.jsx | 2 +-
.../src/components/CronPicker/CronPicker.tsx | 9 +
.../DatabaseSelector.test.tsx | 277 +-
.../src/components/DatabaseSelector/index.tsx | 122 +-
.../Datasource/ChangeDatasourceModal.tsx | 8 +-
.../components/Datasource/CollectionTable.tsx | 22 +-
.../Datasource/DatasourceEditor.jsx | 73 +-
.../Datasource/DatasourceEditor.test.jsx | 44 +-
.../Datasource/DatasourceModal.test.jsx | 9 +-
.../components/Datasource/DatasourceModal.tsx | 4 +-
.../DeprecatedSelect.stories.tsx | 0
.../DeprecatedSelect.tsx | 6 +-
.../NativeSelect.tsx | 0
.../OnPasteSelect.jsx | 2 +-
.../OnPasteSelect.test.jsx | 8 +-
.../WindowedSelect/WindowedMenuList.tsx | 2 +-
.../WindowedSelect/index.tsx | 0
.../WindowedSelect/windowed.tsx | 22 +-
.../{Select => DeprecatedSelect}/index.ts | 0
.../components/DeprecatedSelect/styles.tsx | 406 +
.../{Select => DeprecatedSelect}/utils.ts | 40 -
.../src/components/DesignSystem.stories.mdx | 25 +
.../src/components/Dropdown/index.tsx | 28 +-
.../src/components/DropdownButton/index.tsx | 3 +-
.../DropdownContainer.stories.tsx | 109 +
.../DropdownContainer.test.tsx | 156 +
.../DropdownContainer/Overview.stories.mdx | 17 +
.../components/DropdownContainer/index.tsx | 408 +
.../DropdownSelectableIcon.stories.tsx | 65 +
.../DropdownSelectableIcon.test.tsx | 99 +
.../DropdownSelectableIcon/index.tsx | 154 +
.../components/DynamicEditableTitle/index.tsx | 2 +-
.../src/components/EditableTitle/index.tsx | 21 +-
.../src/components/EmptyState/index.tsx | 38 +-
.../ErrorMessage/BasicErrorAlert.test.tsx | 7 +
.../DatabaseErrorMessage.test.tsx | 7 +
.../ErrorMessage/DatabaseErrorMessage.tsx | 19 +-
.../DatasetNotFoundErrorMessage.test.tsx | 7 +
.../ErrorMessage/ErrorAlert.test.tsx | 13 +
.../components/ErrorMessage/ErrorAlert.tsx | 24 +-
.../ErrorMessageWithStackTrace.test.tsx | 7 +
.../ErrorMessageWithStackTrace.tsx | 5 +-
.../ParameterErrorMessage.test.tsx | 7 +
.../ErrorMessage/TimeoutErrorMessage.test.tsx | 7 +
.../src/components/FacePile/index.tsx | 4 +-
.../src/components/FaveStar/FaveStar.test.tsx | 17 +-
.../FilterableTable/FilterableTable.test.tsx | 17 +
.../src/components/FilterableTable/index.tsx | 499 +-
.../Form/LabeledErrorBoundInput.test.jsx | 14 +
.../Form/LabeledErrorBoundInput.tsx | 26 +-
.../GenericLink/GenericLink.test.tsx | 59 +
.../components/GenericLink/GenericLink.tsx | 52 +
.../src/components/Icons/index.tsx | 2 +-
.../src/components/ImportModal/ErrorAlert.tsx | 2 +-
.../src/components/ImportModal/index.tsx | 4 +-
.../IndeterminateCheckbox.test.tsx | 37 +-
.../LastUpdated/LastUpdated.test.tsx | 4 +-
.../components/ListView/CrossLinks.test.tsx | 97 +
.../src/components/ListView/CrossLinks.tsx | 122 +
.../ListView/CrossLinksTooltip.test.tsx | 89 +
.../components/ListView/CrossLinksTooltip.tsx | 73 +
.../components/ListView/Filters/DateRange.tsx | 3 +-
.../components/ListView/Filters/Select.tsx | 46 +-
.../src/components/ListView/Filters/index.tsx | 47 +-
.../src/components/ListView/types.ts | 4 +
.../src/components/ListView/utils.ts | 4 +-
.../ListViewCard/ListViewCard.stories.tsx | 26 +-
.../src/components/ListViewCard/index.tsx | 29 +-
.../components/Loading/Loading.stories.tsx | 4 +-
.../src/components/Loading/Loading.test.tsx | 4 +-
.../src/components/Loading/index.tsx | 7 +-
.../src/components/Menu/index.tsx | 3 +
.../src/components/MessageToasts/Toast.tsx | 2 +-
.../components/MetadataBar/ContentConfig.tsx | 136 +
.../src/components/MetadataBar/ContentType.ts | 91 +
.../MetadataBar/MetadataBar.stories.mdx | 145 +
.../MetadataBar/MetadataBar.stories.tsx | 109 +
.../MetadataBar/MetadataBar.test.tsx | 268 +
.../components/MetadataBar/MetadataBar.tsx | 237 +
.../components/MetadataBar/index.tsx} | 15 +-
.../src/components/Modal/Modal.stories.tsx | 15 +
.../src/components/Modal/Modal.tsx | 79 +-
.../ModalTrigger/ModalTrigger.stories.tsx | 8 +-
.../src/components/ModalTrigger/index.jsx | 129 -
.../src/components/ModalTrigger/index.tsx | 130 +
.../PageHeaderWithActions/index.tsx | 11 +-
.../PopoverDropdown/PopoverDropdown.test.tsx | 20 +-
.../PopoverSection/PopoverSection.test.tsx | 14 +-
.../src/components/ProgressBar/index.tsx | 2 +-
.../src/components/Radio/index.tsx | 1 +
.../RefreshLabel/RefreshLabel.test.tsx | 8 +-
.../HeaderReportDropdown/index.test.tsx | 92 +-
.../HeaderReportDropdown/index.tsx | 30 +-
.../ReportModal/ReportModal.test.tsx | 21 +-
.../src/components/ReportModal/index.tsx | 2 +-
.../src/components/ResizableSidebar/index.tsx | 82 +
.../useStoredSidebarWidth.test.ts | 92 +
.../ResizableSidebar/useStoredSidebarWidth.ts | 51 +
.../components/Select/AsyncSelect.stories.tsx | 368 +
.../components/Select/AsyncSelect.test.tsx | 813 +
.../src/components/Select/AsyncSelect.tsx | 532 +
.../src/components/Select/CustomTag.tsx | 82 +
.../src/components/Select/Select.stories.tsx | 247 +-
.../src/components/Select/Select.test.tsx | 596 +-
.../src/components/Select/Select.tsx | 1128 +-
.../src/components/Select/constants.ts | 52 +
.../src/components/Select/styles.tsx | 496 +-
.../src/components/Select/types.ts | 217 +
.../src/components/Select/utils.tsx | 224 +
.../src/components/Table/Table.overview.mdx | 339 +
.../src/components/Table/Table.stories.tsx | 682 +
.../src/components/Table/Table.test.tsx | 80 +
.../src/components/Table/VirtualTable.tsx | 247 +
.../ActionCell/ActionCell.overview.mdx | 69 +
.../ActionCell/ActionCell.stories.tsx | 36 +
.../ActionCell/ActionCell.test.tsx | 50 +
.../cell-renderers/ActionCell/fixtures.ts | 47 +
.../Table/cell-renderers/ActionCell/index.tsx | 145 +
.../BooleanCell/BooleanCell.stories.tsx | 34 +
.../BooleanCell/BooleanCell.test.tsx | 37 +
.../cell-renderers/BooleanCell/index.tsx | 30 +
.../ButtonCell/ButtonCell.stories.tsx | 62 +
.../ButtonCell/ButtonCell.test.tsx | 40 +
.../cell-renderers/ButtonCell/index.tsx} | 57 +-
.../NullCell/NullCell.stories.tsx} | 19 +-
.../NullCell/NullCell.test.tsx} | 31 +-
.../Table/cell-renderers/NullCell/index.tsx | 37 +
.../NumericCell/NumericCell.stories.tsx} | 44 +-
.../NumericCell/NumericCell.test.tsx} | 52 +-
.../cell-renderers/NumericCell/index.tsx | 418 +
.../TimeCell/TimeCell.stories.tsx} | 56 +-
.../cell-renderers/TimeCell/TimeCell.test.tsx | 49 +
.../Table/cell-renderers/TimeCell/index.tsx | 38 +
.../Table/cell-renderers/fixtures.ts | 25 +
.../header-renderers/HeaderWithRadioGroup.tsx | 94 +
.../src/components/Table/index.tsx | 454 +
.../src/components/Table/sorters.test.ts | 100 +
.../state.ts => components/Table/sorters.ts} | 35 +-
.../Table/utils/InteractiveTableUtils.ts | 233 +
.../src/components/Table/utils/utils.test.ts | 48 +
.../src/components/Table/utils/utils.ts | 40 +
.../src/components/TableCollection/index.tsx | 6 +-
.../TableSelector/TableSelector.test.tsx | 95 +-
.../src/components/TableSelector/index.tsx | 206 +-
.../TableView/TableView.stories.tsx | 1 +
.../src/components/TableView/TableView.tsx | 48 +-
.../src/components/Timer/index.tsx | 1 +
.../TimezoneSelector.test.tsx | 8 +-
.../src/components/Tooltip/index.tsx | 7 +-
.../src/components/TruncatedList/index.tsx | 160 +
.../src/components/atomic-design.png | Bin 0 -> 163100 bytes
superset-frontend/src/components/index.ts | 1 +
superset-frontend/src/constants.ts | 82 +-
.../src/dashboard/actions/dashboardInfo.ts | 100 +-
.../src/dashboard/actions/dashboardState.js | 186 +-
.../dashboard/actions/dashboardState.test.js | 86 +-
.../src/dashboard/actions/hydrate.js | 121 +-
.../src/dashboard/actions/nativeFilters.ts | 24 +
.../src/dashboard/actions/sliceEntities.js | 213 +-
.../dashboard/actions/sliceEntities.test.js | 102 +
.../src/dashboard/components/AddSliceCard.jsx | 148 -
.../AddSliceCard/AddSliceCard.test.tsx | 62 +
.../components/AddSliceCard/AddSliceCard.tsx | 288 +
.../components/AddSliceCard/index.ts} | 5 +-
.../dashboard/components/AnchorLink/index.tsx | 3 +-
.../BuilderComponentPane.test.tsx | 2 +-
.../components/BuilderComponentPane/index.tsx | 159 +-
.../CrossFilterScopingModal.tsx | 14 +-
.../src/dashboard/components/Dashboard.jsx | 7 +-
.../dashboard/components/Dashboard.test.jsx | 3 +-
.../DashboardBuilder.test.jsx | 196 -
.../DashboardBuilder.test.tsx | 291 +
.../DashboardBuilder/DashboardBuilder.tsx | 543 +-
.../DashboardBuilder/DashboardContainer.tsx | 98 +-
.../components/DashboardEmbedControls.tsx | 35 +-
.../dashboard/components/DashboardGrid.jsx | 88 +-
.../components/DashboardGrid.test.jsx | 7 -
.../DetailsPanel/DetailsPanel.test.tsx | 22 +-
.../FiltersBadge/DetailsPanel/index.tsx | 17 +-
.../FilterIndicator/FilterIndicator.test.tsx | 16 +-
.../FiltersBadge/FilterIndicator/index.tsx | 12 +-
.../components/FiltersBadge/index.tsx | 4 +-
.../components/FiltersBadge/selectors.ts | 17 +-
.../components/Header/Header.test.tsx | 26 +-
.../HeaderActionsDropdown.test.tsx | 8 +-
.../Header/HeaderActionsDropdown/index.jsx | 29 +-
.../src/dashboard/components/Header/index.jsx | 62 +-
.../src/dashboard/components/Header/types.ts | 3 +-
.../OverwriteConfirm.test.tsx | 50 +
.../OverwriteConfirmModal.test.tsx | 90 +
.../OverwriteConfirmModal.tsx | 209 +
.../OverwriteConfirm/index.tsx} | 52 +-
.../PropertiesModal/PropertiesModal.test.tsx | 185 +-
.../components/PropertiesModal/index.tsx | 127 +-
.../components/PublishedStatus/index.jsx | 6 +-
.../components/RefreshIntervalModal.test.tsx | 17 +-
.../components/RefreshIntervalModal.tsx | 44 +-
.../src/dashboard/components/SaveModal.tsx | 18 +-
.../src/dashboard/components/SliceAdder.jsx | 98 +-
.../dashboard/components/SliceAdder.test.jsx | 13 +-
.../SliceHeader/SliceHeader.test.tsx | 92 +-
.../components/SliceHeader/index.tsx | 113 +-
.../SliceHeaderControls.test.tsx | 167 +-
.../components/SliceHeaderControls/index.tsx | 180 +-
.../components/URLShortLinkButton/index.tsx | 34 +-
.../components/dnd/DragDroppable.jsx | 89 +-
.../components/dnd/DragDroppable.test.jsx | 5 +-
.../components/dnd/dragDroppableConfig.js | 2 +-
.../dashboard/components/dnd/handleHover.js | 2 +
.../filterscope/FilterScopeModal.tsx | 12 +-
.../filterscope/FilterScopeSelector.jsx | 280 +-
.../components/gridComponents/Chart.jsx | 77 +-
.../components/gridComponents/Chart.test.jsx | 11 +-
.../components/gridComponents/ChartHolder.jsx | 420 -
.../gridComponents/ChartHolder.test.jsx | 138 -
.../gridComponents/ChartHolder.test.tsx | 375 +-
.../components/gridComponents/ChartHolder.tsx | 334 +
.../components/gridComponents/Column.jsx | 87 +-
.../components/gridComponents/Column.test.jsx | 9 +-
.../components/gridComponents/Divider.jsx | 28 +-
.../components/gridComponents/Header.jsx | 63 +-
.../components/gridComponents/Markdown.jsx | 46 +-
.../components/gridComponents/Row.jsx | 129 +-
.../components/gridComponents/Row.test.jsx | 9 +-
.../components/gridComponents/Tab.jsx | 10 +
.../components/gridComponents/Tabs.jsx | 73 +-
.../components/gridComponents/Tabs.test.jsx | 14 +-
.../new/DraggableNewComponent.jsx | 66 +-
.../new/DraggableNewComponent.test.jsx | 6 +-
.../gridComponents/new/NewMarkdown.jsx | 5 +-
.../menu/BackgroundStyleDropdown.tsx | 56 +-
.../ShareMenuItems/ShareMenuItems.test.tsx | 5 +
.../components/menu/ShareMenuItems/index.tsx | 20 +-
.../components/menu/WithPopoverMenu.tsx | 70 +-
.../ActionButtons/ActionButtons.test.tsx | 28 +-
.../FilterBar/ActionButtons/index.tsx | 115 +-
.../FilterBar/FilterBar.test.tsx | 35 +-
.../FilterBarSettings.test.tsx | 299 +
.../FilterBar/FilterBarSettings/index.tsx | 192 +
.../FilterConfigurationLink/index.tsx | 38 +-
.../FilterControls/FilterControl.tsx | 225 +-
.../FilterControls/FilterControls.tsx | 297 +-
.../FilterControls/FilterDivider.stories.tsx | 121 +
.../FilterControls/FilterDivider.test.tsx | 135 +
.../FilterControls/FilterDivider.tsx | 162 +
.../FilterBar/FilterControls/FilterValue.tsx | 52 +-
.../FilterBar/FilterControls/types.ts | 15 +-
.../FilterBar/FilterControls/utils.ts | 16 +-
.../FilterBar/FilterSets/EditSection.tsx | 6 +-
.../FilterSets/FilterSetUnit.test.tsx | 2 +-
.../FilterBar/FilterSets/FilterSetUnit.tsx | 11 +-
.../FilterBar/FilterSets/FilterSets.test.tsx | 2 +-
.../FilterBar/FilterSets/FiltersHeader.tsx | 2 +-
.../FilterBar/FilterSets/Footer.tsx | 2 +-
.../FilterBar/FilterSets/index.tsx | 4 +-
.../FiltersDropdownContent/index.tsx | 54 +
.../FiltersOutOfScopeCollapsible/index.tsx | 89 +
.../nativeFilters/FilterBar/Header/index.tsx | 52 +-
.../nativeFilters/FilterBar/Horizontal.tsx | 138 +
.../FilterBar/HorizontalFilterBar.test.tsx | 97 +
.../nativeFilters/FilterBar/Vertical.tsx | 316 +
.../nativeFilters/FilterBar/index.tsx | 357 +-
.../nativeFilters/FilterBar/state.ts | 2 +-
.../nativeFilters/FilterBar/types.ts | 67 +
.../FilterBar/useFilterControlFactory.tsx | 87 +
.../nativeFilters/FilterBar/utils.ts | 9 +-
.../FilterCard/DependenciesRow.tsx | 17 +-
.../FilterCard/FilterCard.test.tsx | 173 +-
.../FilterCard/FilterCardContent.tsx | 12 +-
.../nativeFilters/FilterCard/NameRow.tsx | 55 +-
.../nativeFilters/FilterCard/ScopeRow.tsx | 16 +-
.../nativeFilters/FilterCard/Styles.ts | 5 +
.../nativeFilters/FilterCard/index.tsx | 10 +-
.../nativeFilters/FilterCard/types.ts | 7 +
.../FilterCard/useFilterScope.ts | 7 +-
.../FilterConfigPane.test.tsx | 8 -
.../FilterConfigurePane.tsx | 58 +-
.../FiltersConfigModal/FilterTitlePane.tsx | 4 +-
.../FiltersConfigForm/DatasetSelect.tsx | 5 +-
.../FiltersConfigForm/DefaultValue.tsx | 4 +-
.../FilterScope/utils.test.ts | 18204 ++++++++
.../FiltersConfigForm/FilterScope/utils.ts | 53 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 37 +-
.../FiltersConfigForm/getControlItemsMap.tsx | 2 +-
.../FiltersConfigForm/utils.ts | 10 +-
.../FiltersConfigModal.test.tsx | 3 +-
.../FiltersConfigModal/FiltersConfigModal.tsx | 237 +-
.../NativeFiltersModal.test.tsx | 2 +-
.../components/nativeFilters/utils.ts | 17 +-
.../resizable/ResizableContainer.jsx | 92 +-
superset-frontend/src/dashboard/constants.ts | 2 +
.../src/dashboard/containers/Chart.jsx | 7 +-
.../src/dashboard/containers/Dashboard.ts | 2 +-
.../containers/DashboardComponent.jsx | 2 -
.../dashboard/containers/DashboardHeader.jsx | 6 +-
.../dashboard/containers/DashboardPage.tsx | 153 +-
.../src/dashboard/containers/SliceAdder.jsx | 8 +-
.../src/dashboard/reducers/dashboardInfo.js | 16 +-
.../src/dashboard/reducers/dashboardLayout.js | 64 +-
.../reducers/dashboardLayout.test.js | 23 +-
.../src/dashboard/reducers/dashboardState.js | 30 +-
.../dashboard/reducers/dashboardState.test.js | 9 +-
.../src/dashboard/reducers/nativeFilters.ts | 14 +
.../src/dashboard/reducers/types.ts | 1 +
superset-frontend/src/dashboard/styles.ts | 42 +
.../stylesheets/builder-sidepane.less | 132 -
.../stylesheets/components/chart.less | 151 -
.../stylesheets/components/column.less | 64 -
.../stylesheets/components/header.less | 87 -
.../stylesheets/components/index.less | 25 -
.../dashboard/stylesheets/components/row.less | 86 -
.../src/dashboard/stylesheets/dashboard.less | 165 -
.../src/dashboard/stylesheets/dnd.less | 130 -
.../stylesheets/filter-scope-selector.less | 259 -
.../dashboard/stylesheets/popover-menu.less | 140 -
.../src/dashboard/stylesheets/resizable.less | 105 -
superset-frontend/src/dashboard/types.ts | 56 +-
.../util/activeAllDashboardFilters.ts | 87 +-
.../dashboard/util/activeDashboardFilters.js | 4 +-
.../charts/getFormDataWithExtraFilters.ts | 24 +-
.../src/dashboard/util/constants.ts | 1 +
.../src/dashboard/util/crossFilters.ts | 26 +
.../util/filterboxMigrationHelper.test.ts | 4 +-
.../util/filterboxMigrationHelper.ts | 108 +-
...dParentId.test.js => findParentId.test.ts} | 11 +
.../src/dashboard/util/findParentId.ts | 68 +
.../util/findTabIndexByComponentId.test.js | 2 +-
.../util/getFilterConfigsFromFormdata.js | 8 -
.../util/getFormDataWithExtraFilters.test.ts | 13 +-
.../dashboard/util/getOverwriteItems.test.ts | 57 +
.../src/dashboard/util/getOverwriteItems.ts | 46 +
.../dashboard/util/getSliceHeaderTooltip.tsx | 44 +
.../util/logging/childChartsDidLoad.js | 2 +-
.../src/dashboard/util/newComponentFactory.js | 2 +-
...ission.test.ts => permissionUtils.test.ts} | 87 +-
.../{findPermission.ts => permissionUtils.ts} | 30 +-
.../src/dashboard/util/propShapes.jsx | 14 +-
.../util/updateComponentParentsList.js | 40 +-
.../util/updateComponentParentsList.test.js | 67 +-
.../useFilterFocusHighlightStyles.test.tsx | 248 +
.../util/useFilterFocusHighlightStyles.ts | 92 +
superset-frontend/src/embedded/api.tsx | 68 +
superset-frontend/src/embedded/index.tsx | 40 +-
superset-frontend/src/explore/App.jsx | 52 -
superset-frontend/src/explore/ExplorePage.tsx | 162 +
.../actions/datasourcesActions.test.ts | 139 +
.../src/explore/actions/datasourcesActions.ts | 93 +
.../src/explore/actions/exploreActions.ts | 44 +-
.../explore/actions/hydrateExplore.test.ts | 214 +
.../src/explore/actions/hydrateExplore.ts | 195 +
.../src/explore/actions/saveModalActions.js | 212 +-
.../explore/actions/saveModalActions.test.js | 341 +
.../src/explore/components/Control.test.tsx | 2 +-
.../src/explore/components/ControlHeader.tsx | 54 +-
.../ControlPanelsContainer.test.tsx | 8 +-
.../components/ControlPanelsContainer.tsx | 290 +-
.../DataTableControl/FilterInput.test.tsx | 1 +
.../components/DataTableControl/index.tsx | 4 +-
.../DataTablesPane/DataTablesPane.tsx | 8 +-
.../components/ResultsPaneOnDashboard.tsx | 34 +-
.../DataTablesPane/components/SamplesPane.tsx | 4 +-
.../components/useResultsPane.tsx | 52 +-
.../test/DataTablesPane.test.tsx | 21 +-
.../test/ResultsPaneOnDashboard.test.tsx | 20 +-
.../DataTablesPane/test/SamplesPane.test.tsx | 51 +-
.../DatasourcePanel/DatasourcePanel.test.tsx | 148 +-
.../DatasourcePanelDragOption.test.tsx | 39 +-
.../components/DatasourcePanel/fixtures.tsx | 3 +-
.../components/DatasourcePanel/index.tsx | 192 +-
.../src/explore/components/ExploreAlert.tsx | 9 +-
.../ExploreChartHeader.test.tsx | 102 +-
.../components/ExploreChartHeader/index.jsx | 191 +-
.../explore/components/ExploreChartPanel.jsx | 70 +-
.../components/ExploreChartPanel.test.jsx | 56 +-
.../ExploreViewContainer.test.tsx | 101 +-
.../components/ExploreViewContainer/index.jsx | 159 +-
.../ExportToCSVDropdown.test.tsx | 42 +-
.../PropertiesModal/PropertiesModal.test.tsx | 3 +
.../components/PropertiesModal/index.tsx | 17 +-
.../components/RowCountLabel/index.tsx | 12 +-
.../src/explore/components/SaveModal.test.jsx | 461 +-
.../src/explore/components/SaveModal.tsx | 468 +-
.../AnnotationLayer.jsx | 73 +-
.../AnnotationLayer.test.tsx | 21 +-
.../controls/AnnotationLayerControl/index.jsx | 11 +-
.../CollectionControl.test.tsx | 27 +-
.../controls/ColorPickerControl.jsx | 4 +-
.../ColorSchemeControl.test.tsx | 4 +-
.../ColorSchemeLabel.test.tsx | 59 +
.../ColorSchemeControl/ColorSchemeLabel.tsx | 126 +
.../controls/ColorSchemeControl/index.jsx | 208 -
.../controls/ColorSchemeControl/index.tsx | 189 +
.../FormattingPopoverContent.tsx | 2 +-
.../ControlPopover/ControlPopover.tsx | 24 +-
.../DatasourceControl.test.jsx | 59 +-
.../DatasourceControl.test.tsx | 257 +-
.../controls/DatasourceControl/index.jsx | 208 +-
.../DateFilterControl/DateFilterLabel.tsx | 254 +-
.../components/AdvancedFrame.tsx | 24 +-
.../components/CommonFrame.tsx | 8 +-
.../components/DateLabel.tsx | 100 +
.../DateFilterControl/components/index.ts | 1 +
.../controls/DateFilterControl/index.ts | 1 +
.../AdvancedFrame.test.tsx | 2 +-
.../CustomFrame.test.tsx | 12 +-
.../tests/DateFilterLabel.test.tsx | 108 +
.../{utils => tests}/utils.test.ts | 0
.../controls/DateFilterControl/types.ts | 10 +
.../DateFilterControl/utils/constants.ts | 15 +-
.../utils/dateFilterUtils.ts | 65 +-
.../ColumnSelectPopover.tsx | 90 +-
.../ColumnSelectPopoverTrigger.tsx | 50 +-
.../DndAdhocFilterOption.tsx | 78 +
.../DndColumnSelect.test.tsx | 43 +-
.../DndColumnSelect.tsx | 121 +-
.../DndFilterSelect.test.tsx | 106 +-
.../DndFilterSelect.tsx | 127 +-
.../DndMetricSelect.test.tsx | 28 +-
.../DndMetricSelect.tsx | 156 +-
.../DndColumnSelectControl/Option.test.tsx | 24 +-
.../DndColumnSelectControl/Option.tsx | 10 +-
.../OptionWrapper.test.tsx | 12 +-
.../DndColumnSelectControl/OptionWrapper.tsx | 6 +-
.../controls/DndColumnSelectControl/types.ts | 2 +
.../AdhocFilter/AdhocFilter.test.js | 1 +
.../FilterControl/AdhocFilter/index.js | 5 +-
.../AdhocFilterControl/index.jsx | 43 +-
.../AdhocFilterEditPopover.test.jsx | 3 +-
.../AdhocFilterEditPopover/index.jsx | 29 +-
...FilterEditPopoverSimpleTabContent.test.tsx | 44 +-
.../index.tsx | 206 +-
.../AdhocFilterOption.test.tsx | 39 +-
.../FilterControl/AdhocFilterOption/index.jsx | 86 -
.../FilterControl/AdhocFilterOption/index.tsx | 80 +
.../AdhocFilterPopoverTrigger/index.tsx | 2 +
.../controls/FilterControl/utils/index.ts | 20 +
.../utils/useDatePickerInAdhocFilter.tsx | 52 +
.../utils/useDatePickerInAdhocfilter.test.ts | 64 +
.../utils/useGetTimeRangeLabel.test.ts | 103 +
.../utils/useGetTimeRangeLabel.tsx | 75 +
.../FixedOrMetricControl.test.tsx | 7 +
.../controls/FixedOrMetricControl/index.jsx | 2 +-
.../controls/MetricControl/AdhocMetric.js | 5 +-
.../MetricControl/AdhocMetric.test.js | 7 +-
.../AdhocMetricEditPopover.test.jsx | 6 +-
.../AdhocMetricEditPopover.test.tsx | 76 +-
.../AdhocMetricEditPopover/index.jsx | 97 +-
.../AdhocMetricEditPopoverTitle.tsx | 2 +-
.../MetricControl/AdhocMetricOption.jsx | 3 +
.../AdhocMetricPopoverTrigger.tsx | 61 +-
.../MetricControl/MetricDefinitionValue.jsx | 5 +-
.../controls/MetricControl/MetricsControl.jsx | 6 +-
.../MetricControl/MetricsControl.test.jsx | 1 -
.../controls/MetricControl/savedMetricType.js | 4 +-
.../controls/OptionControls/index.tsx | 13 +-
.../SelectAsyncControl.test.tsx | 16 +-
.../controls/SelectAsyncControl/index.tsx | 6 +-
.../components/controls/SelectControl.jsx | 4 +-
.../controls/SelectControl.test.jsx | 16 -
.../components/controls/SpatialControl.jsx | 6 +-
.../components/controls/TextAreaControl.jsx | 25 +-
.../TimeSeriesColumnControl/index.jsx | 92 +-
.../explore/components/controls/ViewQuery.tsx | 76 +
.../components/controls/ViewQueryModal.tsx | 53 +-
.../controls/ViewQueryModalFooter.tsx | 83 +
.../components/controls/ViewportControl.jsx | 3 +-
.../VizTypeControl/FastVizSwitcher.tsx | 44 +-
.../VizTypeControl/VizTypeControl.test.tsx | 80 +-
.../VizTypeControl/VizTypeGallery.tsx | 12 +-
.../controls/VizTypeControl/index.tsx | 5 +
.../components/controls/XAxisSortControl.tsx} | 36 +-
.../src/explore/components/controls/index.js | 2 +
.../DashboardsSubMenu.test.tsx | 78 +
.../DashboardsSubMenu.tsx | 146 +
.../useExploreAdditionalActionsMenu/index.jsx | 124 +-
superset-frontend/src/explore/constants.ts | 57 +-
.../src/explore/controlPanels/sections.tsx | 85 +-
.../controlUtils/controlUtils.test.tsx | 1 +
.../explore/controlUtils/getControlState.ts | 17 +-
...trolValuesCompatibleWithDatasource.test.ts | 287 +
...etControlValuesCompatibleWithDatasource.ts | 16 +-
.../getFormDataFromDashboardContext.test.ts | 305 +
.../getFormDataWithDashboardContext.ts | 236 +
.../controlUtils/getSectionsToRender.ts | 10 +-
.../controlUtils/standardizedFormData.test.ts | 364 +-
.../controlUtils/standardizedFormData.ts | 181 +-
superset-frontend/src/explore/controls.jsx | 60 +-
.../exploreUtils/exploreUtils.test.jsx | 4 +-
.../exploreUtils/getExploreUrl.test.ts | 2 +-
.../explore/exploreUtils/getHostName.test.ts | 2 +-
.../getParsedExploreURLParams.test.ts | 62 +
.../exploreUtils/getParsedExploreURLParams.ts | 125 +
.../exploreUtils/getURIDirectory.test.ts | 4 +-
.../src/explore/exploreUtils/index.js | 22 +-
superset-frontend/src/explore/fixtures.tsx | 63 +-
superset-frontend/src/explore/index.jsx | 42 -
superset-frontend/src/explore/main.less | 137 -
.../reducers/datasourcesReducer.ts} | 47 +-
.../src/explore/reducers/exploreReducer.js | 111 +-
.../src/explore/reducers/getInitialState.ts | 125 -
.../src/explore/reducers/saveModalReducer.js | 7 +
superset-frontend/src/explore/store.js | 5 +-
superset-frontend/src/explore/types.ts | 40 +-
superset-frontend/src/featureFlags.ts | 12 +-
.../GroupBy/GroupByFilterPlugin.tsx | 4 +
.../components/GroupBy/controlPanel.ts | 2 +-
.../components/GroupBy/transformProps.ts | 4 +
.../Range/RangeFilterPlugin.test.tsx | 26 +-
.../components/Range/RangeFilterPlugin.tsx | 43 +-
.../filters/components/Range/buildQuery.ts | 6 +-
.../filters/components/Range/controlPanel.ts | 2 +-
.../components/Range/transformProps.ts | 7 +
.../src/filters/components/Range/types.ts | 3 +
.../Select/SelectFilterPlugin.test.tsx | 32 +-
.../components/Select/SelectFilterPlugin.tsx | 28 +-
.../components/Select/buildQuery.test.ts | 10 +-
.../filters/components/Select/buildQuery.ts | 2 +-
.../filters/components/Select/controlPanel.ts | 2 +-
.../components/Select/transformProps.ts | 7 +
.../src/filters/components/Select/types.ts | 3 +
.../components/Time/TimeFilterPlugin.tsx | 42 +-
.../filters/components/Time/controlPanel.ts | 2 +-
.../filters/components/Time/transformProps.ts | 7 +
.../src/filters/components/Time/types.ts | 1 +
.../TimeColumn/TimeColumnFilterPlugin.tsx | 8 +-
.../components/TimeColumn/transformProps.ts | 4 +
.../TimeGrain/TimeGrainFilterPlugin.tsx | 8 +-
.../components/TimeGrain/transformProps.ts | 4 +
.../src/filters/components/types.ts | 5 +
.../src/hooks/apiResources/dashboards.ts | 1 +
.../src/hooks/apiResources/index.ts | 2 +
.../src/hooks/apiResources/schemas.test.ts | 138 +
.../src/hooks/apiResources/schemas.ts | 80 +
.../src/hooks/apiResources/tables.test.ts | 248 +
.../src/hooks/apiResources/tables.ts | 115 +
superset-frontend/src/hooks/useTabId.ts | 15 +
.../utils.ts => hooks/useTruncation/index.ts} | 9 +-
.../useTruncation/useCSSTextTruncation.ts | 61 +
.../useChildElementTruncation.ts} | 55 +-
superset-frontend/src/logger/LogUtils.ts | 28 +
.../src/middleware/asyncEvent.ts | 19 +-
.../src/middleware/logger.test.js | 35 +
.../src/middleware/loggerMiddleware.js | 20 +-
.../src/modules/AnnotationTypes.js | 10 +-
.../ChartCreation/ChartCreation.test.tsx | 153 +
.../ChartCreation/index.tsx} | 184 +-
.../chart => pages/ChartList}/ChartCard.tsx | 7 +-
.../ChartList}/ChartList.test.jsx | 4 +-
.../ChartList/index.tsx} | 112 +-
superset-frontend/src/preamble.ts | 38 +-
superset-frontend/src/profile/App.tsx | 10 +-
.../src/profile/components/App.tsx | 4 +-
.../src/profile/components/CreatedContent.tsx | 43 +-
.../src/profile/components/Favorites.tsx | 7 +-
.../src/profile/components/RecentActivity.tsx | 16 +-
.../src/profile/components/Security.tsx | 13 +-
.../src/profile/components/UserInfo.tsx | 21 +-
superset-frontend/src/profile/types.ts | 4 +
superset-frontend/src/reduxUtils.ts | 25 +-
.../src/reports/actions/reports.js | 5 +-
superset-frontend/src/setup/setupApp.ts | 2 +-
superset-frontend/src/setup/setupClient.ts | 2 +-
...ponents.ts => setupDashboardComponents.ts} | 0
.../setup/setupExtensions.ts} | 5 +-
.../src/showSavedQuery/index.jsx | 5 +-
superset-frontend/src/types/Chart.ts | 15 +
.../helper.ts => src/types/ChartSource.ts} | 6 +-
superset-frontend/src/types/Dashboard.ts | 2 -
.../src/types/DashboardContextForExplore.ts | 43 +
superset-frontend/src/types/Database.ts | 3 +-
superset-frontend/src/types/bootstrapTypes.ts | 97 +-
superset-frontend/src/types/files.d.ts | 1 +
.../src/utils/DebouncedMessageQueue.js | 4 +-
superset-frontend/src/utils/common.js | 17 +-
superset-frontend/src/utils/common.test.jsx | 9 +-
.../src/utils/datasourceUtils.js | 25 +
.../src/utils/downloadAsImage.ts | 10 +-
.../src/utils/findPermission.test.ts | 63 +
superset-frontend/src/utils/findPermission.ts | 28 +
.../src/utils/getBootstrapData.ts | 27 +
.../getChartRequiredFieldsMissingMessage.ts | 5 +-
.../src/utils/getClientErrorObject.ts | 58 +-
.../src/utils/getDatasourceUid.test.ts | 49 +
.../index.tsx => utils/getDatasourceUid.ts} | 7 +-
.../src/utils/hostNamesConfig.js | 5 +-
superset-frontend/src/utils/isBot.ts | 21 +
.../utils/isDashboardVirtualizationEnabled.ts | 30 +
.../src/utils/localStorageHelpers.ts | 20 +-
superset-frontend/src/utils/urlUtils.test.ts | 54 +
superset-frontend/src/utils/urlUtils.ts | 80 +-
superset-frontend/src/views/App.tsx | 71 +-
.../src/views/CRUD/alert/AlertList.test.jsx | 4 +-
.../src/views/CRUD/alert/AlertList.tsx | 78 +-
.../CRUD/alert/AlertReportModal.test.jsx | 20 +-
.../CRUD/alert/AlertReportModal.test.tsx | 34 +
.../src/views/CRUD/alert/AlertReportModal.tsx | 292 +-
.../src/views/CRUD/alert/ExecutionLog.tsx | 14 +-
.../components/AlertReportCronScheduler.tsx | 2 +-
.../views/CRUD/annotation/AnnotationList.tsx | 6 +-
.../CRUD/annotation/AnnotationModal.test.jsx | 4 +-
.../views/CRUD/annotation/AnnotationModal.tsx | 22 +-
.../annotationlayers/AnnotationLayerModal.tsx | 4 +-
.../annotationlayers/AnnotationLayersList.tsx | 12 +-
.../CRUD/csstemplates/CssTemplateModal.tsx | 12 +-
.../CRUD/csstemplates/CssTemplatesList.tsx | 4 +-
.../views/CRUD/dashboard/DashboardCard.tsx | 55 +-
.../views/CRUD/dashboard/DashboardList.tsx | 59 +-
.../src/views/CRUD/data/common.ts | 14 +-
.../CRUD/data/database/DatabaseList.test.jsx | 22 +-
.../views/CRUD/data/database/DatabaseList.tsx | 45 +-
.../CommonParameters.tsx | 53 +-
.../DatabaseConnectionForm/EncryptedField.tsx | 17 +-
.../DatabaseConnectionForm/TableCatalog.tsx | 17 +-
.../ValidatedInputField.tsx | 6 +-
.../DatabaseConnectionForm/index.tsx | 62 +-
.../database/DatabaseModal/ExtraOptions.tsx | 163 +-
.../database/DatabaseModal/ModalHeader.tsx | 78 +-
.../database/DatabaseModal/SSHTunnelForm.tsx | 228 +
.../DatabaseModal/SSHTunnelSwitch.tsx | 58 +
.../database/DatabaseModal/SqlAlchemyForm.tsx | 7 +-
.../database/DatabaseModal/index.test.jsx | 1069 -
.../database/DatabaseModal/index.test.tsx | 2101 +
.../data/database/DatabaseModal/index.tsx | 611 +-
.../data/database/DatabaseModal/styles.ts | 22 +-
.../src/views/CRUD/data/database/types.ts | 127 +-
.../dataset/AddDataset/AddDataset.test.tsx | 47 +
.../DatasetPanel/DatasetPanel.stories.tsx | 44 +
.../DatasetPanel/DatasetPanel.test.tsx | 160 +
.../AddDataset/DatasetPanel/DatasetPanel.tsx | 353 +
.../DatasetPanel/MessageContent.tsx | 107 +
.../AddDataset/DatasetPanel/fixtures.ts} | 46 +-
.../dataset/AddDataset/DatasetPanel/index.tsx | 140 +
.../dataset/AddDataset/DatasetPanel/types.ts | 92 +
.../EditDataset/EditDataset.test.tsx | 43 +
.../EditDataset/UsageTab/UsageTab.test.tsx | 405 +
.../AddDataset/EditDataset/UsageTab/index.tsx | 261 +
.../dataset/AddDataset/EditDataset/index.tsx | 78 +
.../dataset/AddDataset/Footer/Footer.test.tsx | 87 +
.../data/dataset/AddDataset/Footer/index.tsx | 130 +
.../dataset/AddDataset/Header/Header.test.tsx | 54 +
.../data/dataset/AddDataset/Header/index.tsx | 109 +
.../AddDataset/LeftPanel/LeftPanel.test.tsx | 283 +
.../dataset/AddDataset/LeftPanel/index.tsx | 378 +
.../AddDataset/RightPanel/RightPanel.test.tsx | 29 +
.../dataset/AddDataset/RightPanel/index.tsx | 23 +
.../CRUD/data/dataset/AddDataset/index.tsx | 136 +
.../CRUD/data/dataset/AddDataset/types.tsx} | 57 +-
.../CRUD/data/dataset/AddDatasetModal.tsx | 144 -
.../DatasetLayout/DatasetLayout.test.tsx | 88 +
.../CRUD/data/dataset/DatasetLayout/index.tsx | 77 +
...asetList.test.jsx => DatasetList.test.tsx} | 74 +-
.../views/CRUD/data/dataset/DatasetList.tsx | 113 +-
.../data/dataset/DuplicateDatasetModal.tsx | 19 +
.../src/views/CRUD/data/dataset/styles.ts | 146 +
.../src/views/CRUD/data/hooks.ts | 105 +-
.../views/CRUD/data/query/QueryList.test.tsx | 26 +-
.../src/views/CRUD/data/query/QueryList.tsx | 41 +-
.../data/query/QueryPreviewModal.test.tsx | 3 +-
.../CRUD/data/query/QueryPreviewModal.tsx | 54 +-
.../data/savedquery/SavedQueryList.test.jsx | 27 +-
.../CRUD/data/savedquery/SavedQueryList.tsx | 10 +-
.../savedquery/SavedQueryPreviewModal.tsx | 54 +-
superset-frontend/src/views/CRUD/hooks.ts | 29 +-
superset-frontend/src/views/CRUD/types.ts | 31 +-
.../src/views/CRUD/utils.test.tsx | 174 +-
superset-frontend/src/views/CRUD/utils.tsx | 109 +-
.../views/CRUD/welcome/ActivityTable.test.tsx | 13 +-
.../src/views/CRUD/welcome/ActivityTable.tsx | 85 +-
.../views/CRUD/welcome/ChartTable.test.tsx | 29 +-
.../src/views/CRUD/welcome/ChartTable.tsx | 102 +-
.../src/views/CRUD/welcome/DashboardTable.tsx | 140 +-
.../views/CRUD/welcome/EmptyState.test.tsx | 33 +-
.../src/views/CRUD/welcome/EmptyState.tsx | 67 +-
.../src/views/CRUD/welcome/SavedQueries.tsx | 61 +-
.../src/views/CRUD/welcome/Welcome.test.tsx | 82 +-
.../src/views/CRUD/welcome/Welcome.tsx | 318 +-
.../src/views/CRUD/welcome/types.ts | 4 +
superset-frontend/src/views/QueryProvider.tsx | 43 +
.../src/views/RootContextProviders.tsx | 62 +-
.../views/components/LanguagePicker.test.tsx | 7 +-
.../src/views/components/Menu.test.tsx | 182 +-
.../src/views/components/Menu.tsx | 83 +-
.../src/views/components/RightMenu.test.tsx | 354 +
.../{MenuRight.tsx => RightMenu.tsx} | 251 +-
.../src/views/components/SubMenu.test.tsx | 59 +-
.../src/views/components/SubMenu.tsx | 4 +-
.../src/views/components/types.ts | 5 +-
superset-frontend/src/views/menu.tsx | 12 +-
superset-frontend/src/views/routes.test.tsx | 5 +-
superset-frontend/src/views/routes.tsx | 44 +-
superset-frontend/src/views/store.ts | 99 +-
.../visualizations/FilterBox/FilterBox.jsx | 20 +-
.../FilterBox/FilterBoxChartPlugin.js | 3 +
.../visualizations/FilterBox/controlPanel.jsx | 2 +-
.../FilterBox/images/example1.jpg | Bin 0 -> 10921 bytes
.../FilterBox/images/example2.jpg | Bin 0 -> 16969 bytes
.../visualizations/TimeTable/TimeTable.jsx | 7 +-
.../visualizations/TimeTable/controlPanel.js | 7 +-
.../TimeTable/images/example.jpg | Bin 0 -> 72275 bytes
.../src/visualizations/TimeTable/index.ts | 2 +
.../src/visualizations/presets/MainPreset.js | 4 +-
superset-frontend/webpack.config.js | 31 +-
superset-websocket/.nvmrc | 2 +-
superset-websocket/Dockerfile | 25 +-
superset-websocket/README.md | 2 +-
superset-websocket/package-lock.json | 2659 +-
superset-websocket/package.json | 38 +-
superset-websocket/spec/index.test.ts | 2 +-
.../utils/client-ws-app/package-lock.json | 965 +-
.../utils/client-ws-app/package.json | 10 +-
.../utils/client-ws-app/views/index.pug | 2 +-
superset/__init__.py | 1 -
superset/advanced_data_type/api.py | 6 +-
superset/annotation_layers/annotations/api.py | 10 +-
.../annotations/commands/bulk_delete.py | 5 +-
.../annotations/commands/create.py | 6 +-
.../annotations/commands/delete.py | 4 +-
.../annotations/commands/update.py | 4 +-
superset/annotation_layers/annotations/dao.py | 3 +-
superset/annotation_layers/api.py | 10 +-
.../annotation_layers/commands/bulk_delete.py | 5 +-
superset/annotation_layers/commands/create.py | 4 +-
superset/annotation_layers/commands/delete.py | 4 +-
superset/annotation_layers/commands/update.py | 4 +-
superset/annotation_layers/dao.py | 3 +-
superset/async_events/api.py | 8 +-
.../__init__.py | 0
superset/available_domains/api.py | 76 +
superset/available_domains/schemas.py | 21 +
superset/cachekeys/api.py | 12 +-
superset/charts/api.py | 75 +-
superset/charts/commands/bulk_delete.py | 8 +-
superset/charts/commands/create.py | 9 +-
superset/charts/commands/delete.py | 8 +-
superset/charts/commands/export.py | 10 +-
superset/charts/commands/update.py | 18 +-
superset/charts/dao.py | 8 +-
superset/charts/data/api.py | 45 +-
.../data/commands/create_async_job_command.py | 2 +-
.../charts/data/commands/get_data_command.py | 6 +-
superset/charts/filters.py | 32 +
superset/charts/post_processing.py | 33 +-
superset/charts/schemas.py | 32 +-
superset/cli/examples.py | 3 +
superset/cli/importexport.py | 8 +-
superset/cli/thumbnails.py | 9 +-
superset/cli/update.py | 40 +-
superset/commands/base.py | 14 +-
superset/commands/importers/v1/__init__.py | 3 +
superset/commands/importers/v1/assets.py | 36 +-
superset/commands/importers/v1/examples.py | 1 -
superset/commands/importers/v1/utils.py | 6 +-
superset/commands/utils.py | 26 +-
superset/common/chart_data.py | 7 +
superset/common/query_actions.py | 30 +-
superset/common/query_context_factory.py | 107 +-
superset/common/query_context_processor.py | 176 +-
superset/common/query_object.py | 10 +-
superset/common/query_object_factory.py | 42 +-
superset/common/tags.py | 343 +-
superset/common/utils/dataframe_utils.py | 15 +-
superset/common/utils/time_range_utils.py | 77 +
superset/config.py | 286 +-
superset/connectors/base/models.py | 16 +-
superset/connectors/connector_registry.py | 164 -
superset/connectors/sqla/models.py | 790 +-
superset/connectors/sqla/utils.py | 34 +-
superset/connectors/sqla/views.py | 55 +-
superset/constants.py | 14 +-
superset/css_templates/api.py | 4 +-
.../css_templates/commands/bulk_delete.py | 5 +-
superset/dao/base.py | 21 +-
superset/dao/datasource/dao.py | 147 -
superset/dao/exceptions.py | 2 +
superset/dashboards/api.py | 72 +-
superset/dashboards/commands/bulk_delete.py | 8 +-
superset/dashboards/commands/create.py | 6 +-
superset/dashboards/commands/delete.py | 8 +-
superset/dashboards/commands/export.py | 8 +-
superset/dashboards/commands/importers/v0.py | 13 +-
.../commands/importers/v1/__init__.py | 1 -
superset/dashboards/commands/update.py | 12 +-
superset/dashboards/dao.py | 37 +-
superset/dashboards/filter_sets/api.py | 8 +-
.../dashboards/filter_sets/commands/base.py | 17 +-
.../dashboards/filter_sets/commands/create.py | 11 +-
.../dashboards/filter_sets/commands/delete.py | 5 +-
.../dashboards/filter_sets/commands/update.py | 7 +-
superset/dashboards/filter_sets/filters.py | 12 +-
.../filter_state/commands/create.py | 6 +-
.../filter_state/commands/delete.py | 5 +-
.../filter_state/commands/update.py | 6 +-
superset/dashboards/filters.py | 37 +-
superset/dashboards/permalink/api.py | 19 +-
.../dashboards/permalink/commands/create.py | 23 +-
superset/dashboards/permalink/commands/get.py | 4 +-
superset/dashboards/permalink/schemas.py | 16 +-
superset/dashboards/permalink/types.py | 5 +-
superset/dashboards/schemas.py | 6 +-
superset/databases/api.py | 268 +-
superset/databases/commands/create.py | 56 +-
superset/databases/commands/delete.py | 4 +-
superset/databases/commands/exceptions.py | 5 +
superset/databases/commands/export.py | 16 +-
superset/databases/commands/tables.py | 113 +
.../databases/commands/test_connection.py | 129 +-
superset/databases/commands/update.py | 109 +-
superset/databases/commands/validate.py | 60 +-
superset/databases/dao.py | 35 +
superset/databases/decorators.py | 5 +-
superset/databases/schemas.py | 144 +-
superset/databases/ssh_tunnel/__init__.py | 16 +
.../databases/ssh_tunnel/commands/__init__.py | 16 +
.../databases/ssh_tunnel/commands/create.py | 92 +
.../databases/ssh_tunnel/commands/delete.py | 55 +
.../ssh_tunnel/commands/exceptions.py | 59 +
.../databases/ssh_tunnel/commands/update.py | 63 +
superset/databases/ssh_tunnel/dao.py | 49 +
superset/databases/ssh_tunnel/models.py | 85 +
superset/datasets/api.py | 219 +-
superset/datasets/columns/api.py | 4 +-
superset/datasets/columns/commands/delete.py | 8 +-
superset/datasets/commands/bulk_delete.py | 11 +-
superset/datasets/commands/create.py | 27 +-
superset/datasets/commands/delete.py | 34 +-
superset/datasets/commands/duplicate.py | 133 +
superset/datasets/commands/exceptions.py | 8 +
superset/datasets/commands/export.py | 16 +-
superset/datasets/commands/importers/v0.py | 2 +-
.../datasets/commands/importers/v1/utils.py | 65 +-
superset/datasets/commands/refresh.py | 8 +-
superset/datasets/commands/samples.py | 83 -
superset/datasets/commands/update.py | 12 +-
superset/datasets/dao.py | 180 +-
superset/datasets/metrics/api.py | 4 +-
superset/datasets/metrics/commands/delete.py | 8 +-
superset/datasets/schemas.py | 23 +-
superset/datasource/__init__.py | 16 +
superset/datasource/api.py | 130 +
superset/datasource/dao.py | 70 +
superset/db_engine_specs/__init__.py | 61 +-
superset/db_engine_specs/athena.py | 10 +-
superset/db_engine_specs/base.py | 449 +-
superset/db_engine_specs/bigquery.py | 207 +-
superset/db_engine_specs/clickhouse.py | 11 +-
superset/db_engine_specs/crate.py | 12 +-
superset/db_engine_specs/databricks.py | 314 +-
superset/db_engine_specs/dremio.py | 10 +-
superset/db_engine_specs/drill.py | 28 +-
superset/db_engine_specs/druid.py | 38 +-
superset/db_engine_specs/duckdb.py | 16 +-
superset/db_engine_specs/dynamodb.py | 65 +
superset/db_engine_specs/elasticsearch.py | 12 +-
superset/db_engine_specs/exceptions.py | 2 +-
superset/db_engine_specs/firebird.py | 14 +-
superset/db_engine_specs/firebolt.py | 14 +-
superset/db_engine_specs/gsheets.py | 84 +-
superset/db_engine_specs/hana.py | 10 +-
superset/db_engine_specs/hive.py | 190 +-
superset/db_engine_specs/impala.py | 99 +-
superset/db_engine_specs/kusto.py | 46 +-
superset/db_engine_specs/kylin.py | 10 +-
superset/db_engine_specs/mssql.py | 24 +-
superset/db_engine_specs/mysql.py | 40 +-
superset/db_engine_specs/oracle.py | 16 +-
superset/db_engine_specs/pinot.py | 1 -
superset/db_engine_specs/postgres.py | 48 +-
superset/db_engine_specs/presto.py | 1142 +-
.../risingwave.py} | 12 +-
superset/db_engine_specs/rockset.py | 16 +-
superset/db_engine_specs/shillelagh.py | 6 +-
superset/db_engine_specs/snowflake.py | 92 +-
superset/db_engine_specs/spark.py | 41 +
superset/db_engine_specs/sqlite.py | 46 +-
superset/db_engine_specs/teradata.py | 2 +-
superset/db_engine_specs/trino.py | 173 +-
superset/db_engines/hive.py | 67 -
superset/embedded/view.py | 23 +-
superset/errors.py | 5 +-
superset/examples/bart_lines.py | 48 +-
superset/examples/birth_names.py | 142 +-
.../dashboards/COVID_Vaccine_Dashboard.yaml | 2 +-
superset/examples/country_map.py | 67 +-
superset/examples/data_loading.py | 1 +
superset/examples/energy.py | 37 +-
superset/examples/flights.py | 56 +-
superset/examples/helpers.py | 20 +-
superset/examples/long_lat.py | 88 +-
superset/examples/multiformat_time_series.py | 68 +-
superset/examples/paris.py | 44 +-
superset/examples/random_time_series.py | 42 +-
superset/examples/sf_population_polygons.py | 44 +-
.../examples/supported_charts_dashboard.py | 1288 +
superset/examples/tabbed_dashboard.py | 34 +-
superset/examples/world_bank.py | 61 +-
superset/exceptions.py | 12 +
superset/explore/api.py | 138 +
superset/explore/commands/__init__.py | 16 +
superset/explore/commands/get.py | 191 +
superset/explore/commands/parameters.py | 30 +
superset/explore/exceptions.py | 49 +
superset/explore/form_data/api.py | 27 +-
superset/explore/form_data/commands/create.py | 10 +-
superset/explore/form_data/commands/delete.py | 8 +-
superset/explore/form_data/commands/get.py | 2 -
.../explore/form_data/commands/parameters.py | 3 -
superset/explore/form_data/commands/state.py | 4 +-
superset/explore/form_data/commands/update.py | 10 +-
superset/explore/form_data/commands/utils.py | 5 +-
superset/explore/permalink/api.py | 22 +-
superset/explore/permalink/commands/create.py | 9 +-
superset/explore/permalink/commands/get.py | 6 +-
superset/explore/schemas.py | 114 +
superset/explore/utils.py | 22 +-
superset/extensions/__init__.py | 5 +-
superset/extensions/ssh.py | 92 +
.../extensions/stats_logger.py | 23 +-
superset/importexport/api.py | 8 +-
superset/initialization/__init__.py | 137 +-
superset/jinja_context.py | 11 +-
superset/key_value/commands/create.py | 12 +-
superset/key_value/commands/delete.py | 1 -
superset/key_value/commands/delete_expired.py | 1 -
superset/key_value/commands/get.py | 1 -
superset/key_value/commands/update.py | 12 +-
superset/key_value/commands/upsert.py | 27 +-
superset/key_value/exceptions.py | 4 +
superset/key_value/models.py | 4 +-
superset/key_value/utils.py | 12 +-
superset/migrations/alembic.ini | 7 +-
.../migrations/shared/migrate_viz/__init__.py | 17 +
.../migrations/shared/migrate_viz/base.py | 145 +
.../shared/migrate_viz/processors.py | 55 +
superset/migrations/shared/utils.py | 68 +-
..._08-43_27ae655e4247_make_creator_owners.py | 10 +-
...a_rewriting_url_from_shortner_with_new_.py | 2 +-
..._migrate_num_period_compare_and_period_.py | 2 +-
...26_11-10_c82ee8a39623_add_implicit_tags.py | 9 +-
..._f9a30386bd74_cleanup_time_grainularity.py | 12 +-
...0de1855_add_uuid_column_to_import_mixin.py | 2 +-
...dd_advanced_data_types_to_column_models.py | 4 +-
...add_type_to_native_filter_configuration.py | 4 +-
...9_14-42_b92d69a6643c_rename_csv_to_file.py | 2 +-
...fbb1a5849b_add_embedded_dahshoard_table.py | 2 +-
..._a9422eeaae74_new_dataset_models_take_2.py | 33 +-
...be71abde154_fix_report_schedule_and_log.py | 2 +-
...7_f3afaf1f11f0_add_unique_name_desc_rls.py | 78 +
...b8bca906d2_permalink_rename_filterstate.py | 88 +
...409c7b420ab0_add_created_by_fk_as_owner.py | 135 +
...4daf4_add_user_id_dttm_idx_to_log_model.py | 33 +-
...0_c747c78868b6_migrating_legacy_treemap.py | 47 +
...4-00_06e1e70058c7_migrating_legacy_area.py | 36 +
..._rename_report_schedule_extra_to_extra_.py | 53 +
...39867932713_query_context_to_mediumtext.py | 43 +
...fix_table_chart_conditional_formatting_.py | 82 +
...olumn_allow_multi_schema_metadata_fetch.py | 48 +
...eb4c9d4a4ef_parameters_in_saved_queries.py | 46 +
...c8595_create_ssh_tunnel_credentials_tbl.py | 89 +
...1d9b25135_remove_filter_bar_orientation.py | 65 +
superset/models/core.py | 386 +-
superset/models/dashboard.py | 78 +-
superset/models/datasource_access_request.py | 6 +-
superset/models/filter_set.py | 5 +-
superset/models/helpers.py | 1441 +-
superset/models/slice.py | 53 +-
superset/models/sql_lab.py | 187 +-
superset/models/sql_types/presto_sql_types.py | 2 +-
superset/proxy/api.py | 1 -
superset/queries/api.py | 147 +-
superset/queries/dao.py | 41 +-
superset/queries/filters.py | 4 +-
superset/queries/saved_queries/api.py | 15 +-
.../saved_queries/commands/bulk_delete.py | 5 +-
superset/queries/saved_queries/dao.py | 3 +-
superset/queries/schemas.py | 16 +
superset/reports/api.py | 28 +-
superset/reports/commands/alert.py | 24 +-
superset/reports/commands/base.py | 10 +-
superset/reports/commands/bulk_delete.py | 11 +-
superset/reports/commands/create.py | 42 +-
superset/reports/commands/delete.py | 10 +-
superset/reports/commands/exceptions.py | 56 +-
superset/reports/commands/execute.py | 277 +-
superset/reports/commands/log_prune.py | 2 +-
superset/reports/commands/update.py | 12 +-
superset/reports/dao.py | 19 +-
superset/reports/filters.py | 18 +-
superset/reports/logs/api.py | 2 +-
.../{models/reports.py => reports/models.py} | 26 +-
superset/reports/notifications/__init__.py | 2 +-
superset/reports/notifications/base.py | 4 +-
superset/reports/notifications/email.py | 72 +-
superset/reports/notifications/exceptions.py | 30 +-
superset/reports/notifications/slack.py | 46 +-
superset/reports/schemas.py | 3 +-
superset/reports/types.py | 23 +
superset/result_set.py | 29 +-
superset/security/api.py | 10 +-
superset/security/manager.py | 1024 +-
superset/sql_lab.py | 68 +-
superset/sql_parse.py | 8 +-
superset/sql_validators/presto_db.py | 26 +-
superset/sqllab/api.py | 311 +
superset/sqllab/commands/__init__.py | 16 +
.../{command.py => commands/execute.py} | 10 +-
superset/sqllab/commands/export.py | 134 +
superset/sqllab/commands/results.py | 130 +
superset/sqllab/exceptions.py | 11 +-
superset/sqllab/query_render.py | 4 +-
superset/sqllab/schemas.py | 83 +
superset/sqllab/sqllab_execution_context.py | 10 +-
superset/sqllab/validators.py | 2 +-
superset/tags/__init__.py | 16 +
superset/tags/core.py | 89 +
superset/{models/tags.py => tags/models.py} | 46 +-
superset/tasks/async_queries.py | 170 +-
superset/tasks/cache.py | 10 +-
superset/tasks/exceptions.py | 24 +
superset/tasks/scheduler.py | 27 +-
superset/tasks/slack_util.py | 6 +-
superset/tasks/thumbnails.py | 52 +-
superset/tasks/types.py | 44 +
superset/tasks/utils.py | 94 +
.../templates/appbuilder/navbar_right.html | 127 -
superset/templates/email/role_extended.txt | 2 +-
superset/templates/email/role_granted.txt | 2 +-
superset/templates/superset/add_slice.html | 35 -
superset/templates/superset/basic.html | 2 +-
.../superset/form_view/csv_macros.html | 75 +
.../superset/form_view/csv_scripts.html | 37 +
.../form_view/csv_to_database_view/edit.html | 116 +-
.../form_view/database_schemas_selector.html | 2 +-
.../superset/models/database/macros.html | 2 +-
superset/templates/tail_js_custom_extra.html | 2 +-
superset/temporary_cache/api.py | 16 +-
.../temporary_cache/commands/parameters.py | 3 -
superset/thumbnails/__init__.py | 16 +
superset/thumbnails/digest.py | 83 +
.../translations/de/LC_MESSAGES/messages.json | 4 +-
.../translations/de/LC_MESSAGES/messages.po | 34 +-
.../translations/en/LC_MESSAGES/messages.po | 44 +-
.../translations/es/LC_MESSAGES/messages.po | 115 +-
.../translations/fr/LC_MESSAGES/messages.json | 14 +-
.../translations/fr/LC_MESSAGES/messages.po | 34 +-
.../translations/it/LC_MESSAGES/messages.po | 34 +-
.../translations/ja/LC_MESSAGES/messages.po | 34 +-
.../translations/ko/LC_MESSAGES/messages.po | 34 +-
superset/translations/messages.pot | 44 +-
.../translations/nl/LC_MESSAGES/messages.json | 6 +-
.../translations/nl/LC_MESSAGES/messages.po | 34 +-
.../translations/pt/LC_MESSAGES/message.po | 30 -
.../pt_BR/LC_MESSAGES/messages.po | 34 +-
.../translations/ru/LC_MESSAGES/messages.json | 7605 +++-
.../translations/ru/LC_MESSAGES/messages.po | 18639 +++++---
.../translations/sk/LC_MESSAGES/messages.po | 34 +-
.../translations/sl/LC_MESSAGES/messages.json | 6571 +--
.../translations/sl/LC_MESSAGES/messages.po | 26130 ++++++-----
.../translations/zh/LC_MESSAGES/messages.json | 6677 +--
.../translations/zh/LC_MESSAGES/messages.po | 2712 +-
superset/utils/async_query_manager.py | 25 +-
superset/utils/core.py | 377 +-
superset/utils/csv.py | 18 +-
.../dashboard_filter_scopes_converter.py | 4 -
superset/utils/database.py | 10 +-
superset/utils/date_parser.py | 12 +-
superset/utils/dates.py | 1 +
superset/utils/decorators.py | 12 +-
superset/utils/encrypt.py | 15 +-
superset/utils/excel.py | 29 +
superset/utils/file.py | 23 +
superset/utils/log.py | 37 +-
superset/utils/machine_auth.py | 8 +-
superset/utils/mock_data.py | 48 +-
superset/utils/network.py | 25 +-
.../utils/pandas_postprocessing/__init__.py | 8 +-
.../utils/pandas_postprocessing/boxplot.py | 10 +-
.../utils/pandas_postprocessing/flatten.py | 7 +-
superset/utils/pandas_postprocessing/pivot.py | 13 -
superset/utils/pandas_postprocessing/sort.py | 24 +-
superset/utils/pandas_postprocessing/utils.py | 50 +-
superset/utils/screenshots.py | 38 +-
superset/utils/ssh_tunnel.py | 43 +
superset/utils/url_map_converters.py | 2 +-
superset/utils/urls.py | 4 +-
superset/utils/webdriver.py | 100 +-
superset/views/__init__.py | 1 -
superset/views/access_requests.py | 7 +-
superset/views/annotations.py | 109 +-
superset/views/api.py | 3 +-
superset/views/base.py | 162 +-
superset/views/base_api.py | 197 +-
superset/views/base_schemas.py | 7 +-
superset/views/chart/views.py | 24 +-
superset/views/core.py | 665 +-
superset/views/css_templates.py | 7 +-
superset/views/dashboard/mixin.py | 8 +-
superset/views/dashboard/views.py | 13 +-
superset/views/database/forms.py | 192 +-
superset/views/database/mixins.py | 9 +-
superset/views/database/views.py | 93 +-
superset/views/datasource/schemas.py | 43 +-
superset/views/datasource/utils.py | 128 +
superset/views/datasource/views.py | 80 +-
superset/views/explore.py | 49 +
superset/views/filters.py | 58 +-
superset/views/health.py | 17 +-
superset/views/log/api.py | 91 +-
superset/views/log/dao.py | 131 +
superset/views/log/schemas.py | 45 +
superset/views/log/views.py | 5 +-
superset/views/redirects.py | 39 +-
superset/views/sql_lab/__init__.py | 16 +
superset/views/sql_lab/schemas.py | 35 +
.../views/{sql_lab.py => sql_lab/views.py} | 42 +-
superset/views/tags.py | 30 +-
superset/views/users/api.py | 8 +-
superset/views/utils.py | 36 +-
superset/viz.py | 23 +-
tests/common/query_context_generator.py | 6 +-
tests/conftest.py | 7 +-
tests/integration_tests/access_tests.py | 127 +-
.../advanced_data_type/api_tests.py | 18 +-
.../annotation_layers/fixtures.py | 2 +-
.../available_domains/__init__.py | 16 +
.../available_domains/api_tests.py | 30 +
tests/integration_tests/base_api_tests.py | 120 +-
tests/integration_tests/base_tests.py | 29 +-
.../integration_tests/cachekeys/api_tests.py | 28 +-
tests/integration_tests/celery_tests.py | 95 +-
tests/integration_tests/charts/api_tests.py | 211 +-
.../charts/commands_tests.py | 89 +-
.../charts/data/api_tests.py | 109 +-
tests/integration_tests/cli_tests.py | 24 +-
tests/integration_tests/config_tests.py | 173 -
tests/integration_tests/conftest.py | 215 +-
tests/integration_tests/core_tests.py | 238 +-
tests/integration_tests/csv_upload_tests.py | 367 +-
tests/integration_tests/dashboard_tests.py | 52 +-
tests/integration_tests/dashboard_utils.py | 15 +-
.../integration_tests/dashboards/api_tests.py | 272 +-
.../integration_tests/dashboards/dao_tests.py | 67 +-
.../filter_sets/create_api_tests.py | 9 +-
.../filter_sets/delete_api_tests.py | 2 +-
.../dashboards/filter_sets/get_api_tests.py | 2 +-
.../filter_sets/update_api_tests.py | 2 +-
.../dashboards/filter_state/api_tests.py | 242 +-
.../dashboards/permalink/api_tests.py | 51 +-
.../security/security_dataset_tests.py | 12 +-
.../integration_tests/databases/api_tests.py | 598 +-
.../databases/commands_tests.py | 154 +-
.../databases/schema_tests.py | 153 -
.../databases/ssh_tunnel/__init__.py | 16 +
.../databases/ssh_tunnel/commands/__init__.py | 16 +
.../ssh_tunnel/commands/commands_tests.py | 78 +
tests/integration_tests/datasets/api_tests.py | 639 +-
.../datasets/commands_tests.py | 53 +-
.../integration_tests/datasets/model_tests.py | 87 -
.../integration_tests/datasource/__init__.py | 16 +
.../integration_tests/datasource/api_tests.py | 137 +
tests/integration_tests/datasource_tests.py | 298 +-
.../db_engine_specs/base_engine_spec_tests.py | 90 +-
.../db_engine_specs/base_tests.py | 14 -
.../db_engine_specs/bigquery_tests.py | 39 +-
.../db_engine_specs/clickhouse_tests.py | 47 -
.../db_engine_specs/crate_tests.py | 53 -
.../db_engine_specs/databricks_tests.py | 61 +
.../db_engine_specs/druid_tests.py | 78 -
.../db_engine_specs/elasticsearch_tests.py | 104 -
.../db_engine_specs/firebird_tests.py | 81 -
.../db_engine_specs/firebolt_tests.py | 39 -
.../db_engine_specs/hive_tests.py | 59 +-
.../db_engine_specs/mysql_tests.py | 65 +-
.../db_engine_specs/oracle_tests.py | 87 -
.../db_engine_specs/postgres_tests.py | 78 +-
.../db_engine_specs/presto_tests.py | 215 +-
.../db_engine_specs/trino_tests.py | 150 -
tests/integration_tests/email_tests.py | 57 +
tests/integration_tests/embedded/test_view.py | 72 +
tests/integration_tests/event_logger_tests.py | 10 +-
tests/integration_tests/explore/api_tests.py | 240 +
.../explore/form_data/api_tests.py | 187 +-
.../explore/form_data/commands_tests.py | 17 +-
.../explore/permalink/api_tests.py | 47 +-
.../explore/permalink/commands_tests.py | 8 +-
.../fixtures/birth_names_dashboard.py | 37 +-
.../integration_tests/fixtures/datasource.py | 2 +-
.../fixtures/deck_geojson_form_data.json | 2 +-
.../fixtures/deck_path_form_data.json | 2 +-
.../fixtures/energy_dashboard.py | 24 +-
.../fixtures/importexport.py | 1 +
.../fixtures/tabbed_dashboard.py | 102 +-
.../dremio_tests.py => fixtures/tags.py} | 26 +-
.../fixtures/unicode_dashboard.py | 25 +-
.../fixtures/world_bank_dashboard.py | 25 +-
.../integration_tests/import_export_tests.py | 46 +-
tests/integration_tests/insert_chart_mixin.py | 7 +-
.../key_value/commands/create_test.py | 19 +-
.../key_value/commands/update_test.py | 37 +-
.../key_value/commands/upsert_test.py | 37 +-
tests/integration_tests/log_api_tests.py | 183 +-
...06e1e70058c7_migrate_legacy_area__tests.py | 99 +
...78868b6_migrating_legacy_treemap__tests.py | 91 +
tests/integration_tests/model_tests.py | 94 +-
tests/integration_tests/queries/api_tests.py | 109 +-
.../queries/saved_queries/api_tests.py | 16 +-
.../integration_tests/query_context_tests.py | 443 +-
.../integration_tests/reports/alert_tests.py | 81 +
tests/integration_tests/reports/api_tests.py | 241 +-
.../commands/create_dashboard_report_tests.py | 91 +
.../execute_dashboard_report_tests.py | 113 +
.../reports/commands_tests.py | 522 +-
.../reports/scheduler_tests.py | 90 +-
tests/integration_tests/reports/utils.py | 148 +-
tests/integration_tests/result_set_tests.py | 4 +-
.../security/migrate_roles_tests.py | 8 +-
.../security/row_level_security_tests.py | 93 +-
tests/integration_tests/security_tests.py | 1021 +-
tests/integration_tests/sql_lab/__init__.py | 16 +
tests/integration_tests/sql_lab/api_tests.py | 215 +
.../sql_lab/commands_tests.py | 293 +
tests/integration_tests/sql_lab/conftest.py | 71 +
.../sql_lab/test_execute_sql_statements.py | 56 +
.../integration_tests/sql_validator_tests.py | 4 +-
tests/integration_tests/sqla_models_tests.py | 235 +-
tests/integration_tests/sqllab_tests.py | 109 +-
tests/integration_tests/strategy_tests.py | 2 +-
.../integration_tests/superset_test_config.py | 9 +
tests/integration_tests/tagging_tests.py | 276 +
.../tasks/async_queries_tests.py | 85 +-
tests/integration_tests/test_app.py | 6 -
tests/integration_tests/thumbnails_tests.py | 255 +-
.../utils/decorators_tests.py | 61 -
tests/integration_tests/utils_tests.py | 73 +-
tests/integration_tests/viz_tests.py | 28 +-
.../advanced_data_type/types_tests.py | 55 +-
.../commands/importers/v1/import_test.py | 4 +-
tests/unit_tests/charts/dao/__init__.py | 16 +
tests/unit_tests/charts/dao/dao_tests.py | 67 +
.../unit_tests/charts/test_post_processing.py | 724 +-
tests/unit_tests/columns/test_models.py | 2 +-
tests/unit_tests/commands/export_test.py | 2 +-
.../unit_tests/commands/importers/__init__.py | 16 +
.../commands/importers/v1/__init__.py | 16 +
.../commands/importers/v1/assets_test.py | 131 +
.../unit_tests/common/test_dataframe_utils.py | 50 +
.../common/test_time_range_utils.py | 94 +
tests/unit_tests/config_test.py | 330 +
tests/unit_tests/conftest.py | 52 +-
tests/unit_tests/core_tests.py | 13 +-
tests/unit_tests/dao/queries_test.py | 223 +-
.../commands/importers/v1/import_test.py | 6 +-
.../commands/importers/v1/utils_test.py | 2 +-
tests/unit_tests/databases/api_test.py | 289 +
.../commands/importers/v1/import_test.py | 16 +-
.../commands/test_connection_test.py | 32 +
tests/unit_tests/databases/dao/__init__.py | 16 +
tests/unit_tests/databases/dao/dao_tests.py | 69 +
tests/unit_tests/databases/schema_tests.py | 227 +
.../databases/ssh_tunnel/__init__.py | 16 +
.../databases/ssh_tunnel/commands/__init__.py | 16 +
.../ssh_tunnel/commands/create_test.py | 68 +
.../ssh_tunnel/commands/delete_test.py | 73 +
.../ssh_tunnel/commands/update_test.py | 93 +
.../databases/ssh_tunnel/dao_tests.py | 43 +
tests/unit_tests/databases/utils_test.py | 4 +-
tests/unit_tests/dataframe_test.py | 102 +-
.../datasets/commands/export_test.py | 3 +-
.../commands/importers/v1/import_test.py | 265 +-
tests/unit_tests/datasets/dao/__init__.py | 16 +
tests/unit_tests/datasets/dao/dao_tests.py | 103 +
tests/unit_tests/datasets/test_models.py | 1154 -
.../dao_tests.py} | 83 +-
.../unit_tests/db_engine_specs/test_athena.py | 33 +-
tests/unit_tests/db_engine_specs/test_base.py | 52 +-
.../db_engine_specs/test_bigquery.py | 177 +-
.../db_engine_specs/test_clickhouse.py | 55 +
.../unit_tests/db_engine_specs/test_crate.py | 71 +
.../db_engine_specs/test_databricks.py | 246 +
.../unit_tests/db_engine_specs/test_dremio.py | 42 +
.../unit_tests/db_engine_specs/test_drill.py | 51 +-
.../unit_tests/db_engine_specs/test_druid.py | 95 +
.../unit_tests/db_engine_specs/test_duckdb.py | 40 +
.../db_engine_specs/test_dynamodb.py | 40 +
.../db_engine_specs/test_elasticsearch.py | 106 +
.../db_engine_specs/test_firebird.py | 102 +
.../db_engine_specs/test_firebolt.py | 57 +
.../db_engine_specs/test_gsheets.py | 141 +-
.../db_engine_specs/test_hana.py} | 34 +-
tests/unit_tests/db_engine_specs/test_hive.py | 44 +
.../unit_tests/db_engine_specs/test_impala.py | 40 +
tests/unit_tests/db_engine_specs/test_init.py | 80 +
.../unit_tests/db_engine_specs/test_kusto.py | 61 +-
.../unit_tests/db_engine_specs/test_kylin.py | 40 +
.../unit_tests/db_engine_specs/test_mssql.py | 91 +-
.../unit_tests/db_engine_specs/test_mysql.py | 130 +
.../unit_tests/db_engine_specs/test_oracle.py | 113 +
.../db_engine_specs/test_postgres.py | 91 +
.../unit_tests/db_engine_specs/test_presto.py | 44 +-
.../db_engine_specs/test_rockset.py | 41 +
.../db_engine_specs/test_snowflake.py | 68 +-
.../unit_tests/db_engine_specs/test_sqlite.py | 88 +-
.../db_engine_specs/test_teradata.py | 2 -
.../unit_tests/db_engine_specs/test_trino.py | 348 +-
tests/unit_tests/db_engine_specs/utils.py | 67 +
tests/unit_tests/explore/api_test.py | 30 +
tests/unit_tests/explore/utils_test.py | 148 +-
tests/unit_tests/fixtures/__init__.py | 16 +
tests/unit_tests/fixtures/assets_configs.py | 260 +
tests/unit_tests/importexport/api_test.py | 70 +-
tests/unit_tests/jinja_context_test.py | 2 +-
tests/unit_tests/models/__init__.py | 16 +
tests/unit_tests/models/core_test.py | 147 +
tests/unit_tests/notifications/email_tests.py | 54 +
.../pandas_postprocessing/test_compare.py | 2 -
.../pandas_postprocessing/test_cum.py | 4 -
.../pandas_postprocessing/test_flatten.py | 19 +
.../pandas_postprocessing/test_pivot.py | 129 +-
.../pandas_postprocessing/test_resample.py | 2 -
.../pandas_postprocessing/test_rolling.py | 6 -
.../pandas_postprocessing/test_sort.py | 29 +-
.../pandas_postprocessing/test_utils.py | 30 +
tests/unit_tests/result_set_test.py | 77 +-
tests/unit_tests/sql_lab_test.py | 3 +-
tests/unit_tests/sql_parse_tests.py | 24 +-
tests/unit_tests/tables/test_models.py | 2 +-
tests/unit_tests/tasks/__init__.py | 16 +
tests/unit_tests/tasks/test_cron_util.py | 11 +-
tests/unit_tests/tasks/test_utils.py | 323 +
tests/unit_tests/test_jinja_context.py | 39 +-
tests/unit_tests/thumbnails/__init__.py | 16 +
tests/unit_tests/thumbnails/test_digest.py | 258 +
tests/unit_tests/utils/cache_test.py | 2 +-
tests/unit_tests/utils/date_parser_tests.py | 4 +-
.../utils/log_tests.py} | 29 +-
tests/unit_tests/utils/test_core.py | 86 +
tests/unit_tests/utils/test_decorators.py | 87 +
tests/unit_tests/utils/test_file.py | 44 +
tests/unit_tests/utils/urls_tests.py | 11 +-
2154 files changed, 185167 insertions(+), 89081 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md
create mode 100644 .github/workflows/chromatic-master.yml
create mode 100644 .github/workflows/license-check.yml
rename .github/workflows/{misc.yml => prefer-typescript.yml} (55%)
create mode 100644 .markdownlint.json
create mode 100644 RELEASING/release-notes-2-0/README.md
create mode 100644 RELEASING/release-notes-2-0/changelog.md
create mode 100644 docs/docs/databases/dynamodb.mdx
create mode 100644 docs/docs/databases/kusto.mdx
create mode 100644 docs/docs/databases/risingwave.mdx
create mode 100644 docs/docs/databases/timescaledb.mdx
create mode 100644 docs/static/img/applitools.png
create mode 100644 docs/static/img/dashboard.jpg
delete mode 100644 docs/static/img/dashboard3.png
create mode 100644 docs/static/img/databases/databricks.png
create mode 100644 docs/static/img/databases/timescale.png
create mode 100644 docs/static/img/explore.jpg
delete mode 100644 docs/static/img/explorer5.jpg
create mode 100644 docs/static/img/sql_lab.jpg
delete mode 100644 docs/static/img/sqllab5.jpg
create mode 100644 docs/static/script/matomo.js
create mode 100644 helm/superset/Chart.lock
create mode 100644 helm/superset/README.md
create mode 100644 helm/superset/README.md.gotmpl
create mode 100644 helm/superset/templates/deployment-flower.yaml
create mode 100644 helm/superset/templates/deployment-ws.yaml
create mode 100644 helm/superset/templates/secret-ws.yaml
delete mode 100644 helm/superset/values.schema.json
create mode 100644 superset-frontend/cypress-base/cypress/fixtures/charts.json
create mode 100644 superset-frontend/cypress-base/cypress/fixtures/dashboards.json
delete mode 100644 superset-frontend/cypress-base/cypress/fixtures/example.json
delete mode 100644 superset-frontend/cypress-base/cypress/integration/chart_list/card_view.test.ts
create mode 100644 superset-frontend/cypress-base/cypress/integration/chart_list/list.test.ts
delete mode 100644 superset-frontend/cypress-base/cypress/integration/chart_list/list_view.test.ts
rename superset-frontend/cypress-base/cypress/integration/dashboard/{controls.test.ts => _skip.controls.test.ts} (92%)
rename superset-frontend/cypress-base/cypress/integration/dashboard/{filter.test.ts => _skip.filter.test.ts} (91%)
rename superset-frontend/cypress-base/cypress/integration/dashboard/{key_value.test.ts => _skip.key_value.test.ts} (90%)
rename superset-frontend/cypress-base/cypress/integration/dashboard/{url_params.test.ts => _skip.url_params.test.ts} (83%)
create mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/actions.test.js
delete mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/dashboard.helper.ts
create mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/drilltodetail.test.ts
delete mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/edit_mode.test.js
delete mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/edit_properties.test.ts
create mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/editmode.test.ts
delete mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/fav_star.test.js
delete mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/markdown.test.ts
delete mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard/save.test.js
rename superset-frontend/cypress-base/cypress/integration/dashboard/{nativeFilter.helper.ts => utils.ts} (71%)
delete mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard_list/card_view.test.ts
create mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard_list/list.test.ts
delete mode 100644 superset-frontend/cypress-base/cypress/integration/dashboard_list/list_view.test.ts
create mode 100644 superset-frontend/cypress-base/cypress/integration/dataset/dataset_list.test.ts
rename superset-frontend/cypress-base/cypress/integration/explore/{AdhocFilters.test.ts => _skip.AdhocFilters.test.ts} (92%)
create mode 100644 superset-frontend/cypress-base/cypress/integration/explore/utils.ts
rename superset-frontend/cypress-base/cypress/integration/sqllab/{sourcePanel.index.test.js => _skip.sourcePanel.index.test.js} (94%)
create mode 100644 superset-frontend/cypress-base/cypress/utils/urls.ts
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/fixtures.ts
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/sections/echartsTimeSeriesQuery.tsx
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/customControls.tsx
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/index.ts
delete mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/index.tsx
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/mixins.tsx
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/sharedControls.tsx
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/utils/getStandardizedControls.ts
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/utils/getTemporalColumns.ts
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/test/utils/getStandardizedControls.test.ts
create mode 100644 superset-frontend/packages/superset-ui-chart-controls/test/utils/getTemporalColumns.test.ts
create mode 100644 superset-frontend/packages/superset-ui-core/src/api/types/core.ts
create mode 100644 superset-frontend/packages/superset-ui-core/src/query/getXAxis.ts
create mode 100644 superset-frontend/packages/superset-ui-core/src/query/normalizeTimeColumn.ts
create mode 100644 superset-frontend/packages/superset-ui-core/src/ui-overrides/ExtensionsRegistry.ts
delete mode 100644 superset-frontend/packages/superset-ui-core/src/ui-overrides/UiOverrideRegistry.ts
create mode 100644 superset-frontend/packages/superset-ui-core/src/utils/lruCache.ts
create mode 100644 superset-frontend/packages/superset-ui-core/test/query/getAxis.test.ts
create mode 100644 superset-frontend/packages/superset-ui-core/test/query/normalizeTimeColumn.test.ts
create mode 100644 superset-frontend/packages/superset-ui-core/test/query/types/Column.test.ts
rename superset-frontend/packages/{superset-ui-chart-controls/src/shared-controls/legacySortBy.tsx => superset-ui-core/test/query/types/Datasource.test.ts} (60%)
create mode 100644 superset-frontend/packages/superset-ui-core/test/query/types/Metric.test.ts
rename superset-frontend/packages/superset-ui-core/test/ui-overrides/{UiOverrideRegistry.test.ts => ExtensionsRegistry.test.ts} (81%)
create mode 100644 superset-frontend/packages/superset-ui-core/test/utils/lruCache.test.ts
create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/AreaTimeseries/Stories.tsx
create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/AreaTimeseries/data.ts
create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Sunburst/Stories.tsx
create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Sunburst/data.ts
create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries/confbandData.ts
create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries/stackWithNulls.ts
create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-pivot-table/PivotTableStories.tsx
create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-pivot-table/testData.ts
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-calendar/src/images/example.jpg
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/argentina.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/bolivia.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/chile.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/colombia.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/costa rica.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/cuba.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/dominican republic.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/ecuador.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/el salvador.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/guatemala.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/haiti.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/honduras.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/latvia.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/nicaragua.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/panama.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/papua new guinea.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/paraguay.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/puerto rico.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/saint barthelemy.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/saint martin.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/turkey.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/venezuela.geojson
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/images/exampleGermany.jpg
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/images/exampleUsa.jpg
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-event-flow/src/images/example.jpg
rename superset-frontend/plugins/legacy-plugin-chart-heatmap/src/{controlPanel.ts => controlPanel.tsx} (82%)
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/src/images/example1.jpg
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/src/images/example2.jpg
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-partition/src/images/example.jpg
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-pivot-table/src/images/example.jpg
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/images/example1.jpg
create mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/images/example2.jpg
create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/example.jpg
create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/images/example.jpg
create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/example.jpg
create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/DualLine/images/example.jpg
create mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/LineMulti/images/example.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Funnel/images/example.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Gauge/images/example1.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Gauge/images/example2.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Graph/images/example.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/images/example.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Radar/images/example1.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Radar/images/example2.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/EchartsSunburst.tsx
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/buildQuery.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/controlPanel.tsx
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/images/Sunburst1.png
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/images/Sunburst2.png
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/images/thumbnail.png
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/index.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/transformProps.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/types.ts
rename superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/{ => Regular/Line}/controlPanel.tsx (78%)
rename superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/Regular/{ => SmoothLine}/controlPanel.tsx (79%)
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/constants.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/utils/eventHandlers.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/utils/tooltip.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/utils/treeBuilder.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/utils/treeBuilder.test.ts
delete mode 100644 superset-frontend/plugins/plugin-chart-handlebars/src/i18n.ts
create mode 100644 superset-frontend/plugins/plugin-chart-handlebars/src/images/example1.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-handlebars/src/images/example2.jpg
create mode 100644 superset-frontend/plugins/plugin-chart-pivot-table/src/images/example.jpg
create mode 100644 superset-frontend/spec/fixtures/mockCharts.ts
create mode 100644 superset-frontend/src/SqlLab/SqlLabGlobalStyles.tsx
create mode 100644 superset-frontend/src/SqlLab/components/AceEditorWrapper/AceEditorWrapper.test.tsx
create mode 100644 superset-frontend/src/SqlLab/components/EstimateQueryCostButton/EstimateQueryCostButton.test.tsx
delete mode 100644 superset-frontend/src/SqlLab/components/QueryAutoRefresh/QueryAutoRefresh.test.jsx
create mode 100644 superset-frontend/src/SqlLab/components/QueryAutoRefresh/QueryAutoRefresh.test.tsx
delete mode 100644 superset-frontend/src/SqlLab/components/QueryAutoRefresh/index.jsx
create mode 100644 superset-frontend/src/SqlLab/components/QueryAutoRefresh/index.tsx
create mode 100644 superset-frontend/src/SqlLab/components/QueryLimitSelect/QueryLimitSelect.test.tsx
create mode 100644 superset-frontend/src/SqlLab/components/QueryLimitSelect/index.tsx
delete mode 100644 superset-frontend/src/SqlLab/components/QuerySearch/QuerySearch.test.jsx
delete mode 100644 superset-frontend/src/SqlLab/components/QuerySearch/index.tsx
delete mode 100644 superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.jsx
create mode 100644 superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx
delete mode 100644 superset-frontend/src/SqlLab/components/RunQueryActionButton/RunQueryActionButton.test.jsx
create mode 100644 superset-frontend/src/SqlLab/components/RunQueryActionButton/RunQueryActionButton.test.tsx
create mode 100644 superset-frontend/src/SqlLab/components/SaveDatasetActionButton/SaveDatasetActionButton.test.tsx
create mode 100644 superset-frontend/src/SqlLab/components/SaveDatasetActionButton/index.tsx
delete mode 100644 superset-frontend/src/SqlLab/components/SaveQuery/SaveQuery.test.jsx
create mode 100644 superset-frontend/src/SqlLab/components/SaveQuery/SaveQuery.test.tsx
rename superset-frontend/src/SqlLab/components/ShareSqlLabQuery/{ShareSqlLabQuery.test.jsx => ShareSqlLabQuery.test.tsx} (65%)
create mode 100644 superset-frontend/src/SqlLab/components/SqlEditorTabHeader/SqlEditorTabHeader.test.tsx
create mode 100644 superset-frontend/src/SqlLab/components/SqlEditorTabHeader/index.tsx
rename superset-frontend/src/SqlLab/components/TabStatusIcon/{TabStatusIcon.test.jsx => TabStatusIcon.test.tsx} (72%)
create mode 100644 superset-frontend/src/SqlLab/hooks/useQueryEditor/index.ts
create mode 100644 superset-frontend/src/SqlLab/hooks/useQueryEditor/useQueryEditor.test.ts
delete mode 100644 superset-frontend/src/SqlLab/main.less
create mode 100644 superset-frontend/src/SqlLab/utils/useInterval.ts
delete mode 100644 superset-frontend/src/addSlice/AddSliceContainer.test.tsx
delete mode 100644 superset-frontend/src/addSlice/App.tsx
create mode 100644 superset-frontend/src/assets/images/databricks.png
create mode 100644 superset-frontend/src/assets/images/empty-dataset.svg
create mode 100644 superset-frontend/src/assets/images/empty-table.svg
create mode 100644 superset-frontend/src/assets/images/no-columns.svg
create mode 100644 superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/Buttons.css
create mode 100644 superset-frontend/src/cccs-viz/plugins/plugin-chart-cccs-grid/src/ExpandAllValueRenderer.tsx
create mode 100644 superset-frontend/src/components/Chart/ChartContextMenu.tsx
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.tsx
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/DrillDetailModal.test.tsx
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/DrillDetailModal.tsx
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/DrillDetailTableControls.test.tsx
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/DrillDetailTableControls.tsx
rename superset-frontend/{cypress-base/cypress/integration/dashboard_list/dashboard_list.helper.ts => src/components/Chart/DrillDetail/index.ts} (91%)
rename superset-frontend/src/{views/CRUD/chart => components/Chart/DrillDetail}/types.ts (60%)
create mode 100644 superset-frontend/src/components/Chart/DrillDetail/utils.ts
create mode 100644 superset-frontend/src/components/Chart/utils.test.ts
create mode 100644 superset-frontend/src/components/Chart/utils.ts
rename superset-frontend/src/components/{Select => DeprecatedSelect}/DeprecatedSelect.stories.tsx (100%)
rename superset-frontend/src/components/{Select => DeprecatedSelect}/DeprecatedSelect.tsx (99%)
rename superset-frontend/src/components/{Select => DeprecatedSelect}/NativeSelect.tsx (100%)
rename superset-frontend/src/components/{Select => DeprecatedSelect}/OnPasteSelect.jsx (98%)
rename superset-frontend/src/components/{Select => DeprecatedSelect}/OnPasteSelect.test.jsx (97%)
rename superset-frontend/src/components/{Select => DeprecatedSelect}/WindowedSelect/WindowedMenuList.tsx (98%)
rename superset-frontend/src/components/{Select => DeprecatedSelect}/WindowedSelect/index.tsx (100%)
rename superset-frontend/src/components/{Select => DeprecatedSelect}/WindowedSelect/windowed.tsx (85%)
rename superset-frontend/src/components/{Select => DeprecatedSelect}/index.ts (100%)
create mode 100644 superset-frontend/src/components/DeprecatedSelect/styles.tsx
rename superset-frontend/src/components/{Select => DeprecatedSelect}/utils.ts (66%)
create mode 100644 superset-frontend/src/components/DesignSystem.stories.mdx
create mode 100644 superset-frontend/src/components/DropdownContainer/DropdownContainer.stories.tsx
create mode 100644 superset-frontend/src/components/DropdownContainer/DropdownContainer.test.tsx
create mode 100644 superset-frontend/src/components/DropdownContainer/Overview.stories.mdx
create mode 100644 superset-frontend/src/components/DropdownContainer/index.tsx
create mode 100644 superset-frontend/src/components/DropdownSelectableIcon/DropdownSelectableIcon.stories.tsx
create mode 100644 superset-frontend/src/components/DropdownSelectableIcon/DropdownSelectableIcon.test.tsx
create mode 100644 superset-frontend/src/components/DropdownSelectableIcon/index.tsx
create mode 100644 superset-frontend/src/components/GenericLink/GenericLink.test.tsx
create mode 100644 superset-frontend/src/components/GenericLink/GenericLink.tsx
create mode 100644 superset-frontend/src/components/ListView/CrossLinks.test.tsx
create mode 100644 superset-frontend/src/components/ListView/CrossLinks.tsx
create mode 100644 superset-frontend/src/components/ListView/CrossLinksTooltip.test.tsx
create mode 100644 superset-frontend/src/components/ListView/CrossLinksTooltip.tsx
create mode 100644 superset-frontend/src/components/MetadataBar/ContentConfig.tsx
create mode 100644 superset-frontend/src/components/MetadataBar/ContentType.ts
create mode 100644 superset-frontend/src/components/MetadataBar/MetadataBar.stories.mdx
create mode 100644 superset-frontend/src/components/MetadataBar/MetadataBar.stories.tsx
create mode 100644 superset-frontend/src/components/MetadataBar/MetadataBar.test.tsx
create mode 100644 superset-frontend/src/components/MetadataBar/MetadataBar.tsx
rename superset-frontend/{packages/superset-ui-chart-controls/test/shared-controls/emitFilterControl.test.tsx => src/components/MetadataBar/index.tsx} (77%)
delete mode 100644 superset-frontend/src/components/ModalTrigger/index.jsx
create mode 100644 superset-frontend/src/components/ModalTrigger/index.tsx
create mode 100644 superset-frontend/src/components/ResizableSidebar/index.tsx
create mode 100644 superset-frontend/src/components/ResizableSidebar/useStoredSidebarWidth.test.ts
create mode 100644 superset-frontend/src/components/ResizableSidebar/useStoredSidebarWidth.ts
create mode 100644 superset-frontend/src/components/Select/AsyncSelect.stories.tsx
create mode 100644 superset-frontend/src/components/Select/AsyncSelect.test.tsx
create mode 100644 superset-frontend/src/components/Select/AsyncSelect.tsx
create mode 100644 superset-frontend/src/components/Select/CustomTag.tsx
create mode 100644 superset-frontend/src/components/Select/constants.ts
create mode 100644 superset-frontend/src/components/Select/types.ts
create mode 100644 superset-frontend/src/components/Select/utils.tsx
create mode 100644 superset-frontend/src/components/Table/Table.overview.mdx
create mode 100644 superset-frontend/src/components/Table/Table.stories.tsx
create mode 100644 superset-frontend/src/components/Table/Table.test.tsx
create mode 100644 superset-frontend/src/components/Table/VirtualTable.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/ActionCell/ActionCell.overview.mdx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/ActionCell/ActionCell.stories.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/ActionCell/ActionCell.test.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/ActionCell/fixtures.ts
create mode 100644 superset-frontend/src/components/Table/cell-renderers/ActionCell/index.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/BooleanCell/BooleanCell.stories.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/BooleanCell/BooleanCell.test.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/BooleanCell/index.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/ButtonCell/ButtonCell.stories.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/ButtonCell/ButtonCell.test.tsx
rename superset-frontend/src/{dashboard/stylesheets/builder.less => components/Table/cell-renderers/ButtonCell/index.tsx} (51%)
rename superset-frontend/src/{dashboard/stylesheets/index.less => components/Table/cell-renderers/NullCell/NullCell.stories.tsx} (70%)
rename superset-frontend/src/{explore/reducers/index.js => components/Table/cell-renderers/NullCell/NullCell.test.tsx} (60%)
create mode 100644 superset-frontend/src/components/Table/cell-renderers/NullCell/index.tsx
rename superset-frontend/src/{explore/components/controls/ColorSchemeControl/ColorScheme.test.jsx => components/Table/cell-renderers/NumericCell/NumericCell.stories.tsx} (55%)
rename superset-frontend/src/{explore/exploreUtils/getAnnotationJsonUrl.test.ts => components/Table/cell-renderers/NumericCell/NumericCell.test.tsx} (51%)
create mode 100644 superset-frontend/src/components/Table/cell-renderers/NumericCell/index.tsx
rename superset-frontend/src/{dashboard/stylesheets/components/markdown.less => components/Table/cell-renderers/TimeCell/TimeCell.stories.tsx} (57%)
create mode 100644 superset-frontend/src/components/Table/cell-renderers/TimeCell/TimeCell.test.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/TimeCell/index.tsx
create mode 100644 superset-frontend/src/components/Table/cell-renderers/fixtures.ts
create mode 100644 superset-frontend/src/components/Table/header-renderers/HeaderWithRadioGroup.tsx
create mode 100644 superset-frontend/src/components/Table/index.tsx
create mode 100644 superset-frontend/src/components/Table/sorters.test.ts
rename superset-frontend/src/{SqlLab/components/SouthPane/state.ts => components/Table/sorters.ts} (56%)
create mode 100644 superset-frontend/src/components/Table/utils/InteractiveTableUtils.ts
create mode 100644 superset-frontend/src/components/Table/utils/utils.test.ts
create mode 100644 superset-frontend/src/components/Table/utils/utils.ts
create mode 100644 superset-frontend/src/components/TruncatedList/index.tsx
create mode 100644 superset-frontend/src/components/atomic-design.png
create mode 100644 superset-frontend/src/dashboard/actions/sliceEntities.test.js
delete mode 100644 superset-frontend/src/dashboard/components/AddSliceCard.jsx
create mode 100644 superset-frontend/src/dashboard/components/AddSliceCard/AddSliceCard.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/AddSliceCard/AddSliceCard.tsx
rename superset-frontend/{cypress-base/cypress/integration/chart_list/chart_list.helper.ts => src/dashboard/components/AddSliceCard/index.ts} (91%)
delete mode 100644 superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.test.jsx
create mode 100644 superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/OverwriteConfirm/OverwriteConfirm.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/OverwriteConfirm/OverwriteConfirmModal.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/OverwriteConfirm/OverwriteConfirmModal.tsx
rename superset-frontend/src/dashboard/{stylesheets/components/new-component.less => components/OverwriteConfirm/index.tsx} (54%)
delete mode 100644 superset-frontend/src/dashboard/components/gridComponents/ChartHolder.jsx
delete mode 100644 superset-frontend/src/dashboard/components/gridComponents/ChartHolder.test.jsx
create mode 100644 superset-frontend/src/dashboard/components/gridComponents/ChartHolder.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/index.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterDivider.stories.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterDivider.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterDivider.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FiltersDropdownContent/index.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FiltersOutOfScopeCollapsible/index.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Horizontal.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/HorizontalFilterBar.test.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/Vertical.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/types.ts
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FilterBar/useFilterControlFactory.tsx
create mode 100644 superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/utils.test.ts
delete mode 100644 superset-frontend/src/dashboard/stylesheets/builder-sidepane.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/components/chart.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/components/column.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/components/header.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/components/index.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/components/row.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/dashboard.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/dnd.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/filter-scope-selector.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/popover-menu.less
delete mode 100644 superset-frontend/src/dashboard/stylesheets/resizable.less
create mode 100644 superset-frontend/src/dashboard/util/crossFilters.ts
rename superset-frontend/src/dashboard/util/{findParentId.test.js => findParentId.test.ts} (79%)
create mode 100644 superset-frontend/src/dashboard/util/findParentId.ts
create mode 100644 superset-frontend/src/dashboard/util/getOverwriteItems.test.ts
create mode 100644 superset-frontend/src/dashboard/util/getOverwriteItems.ts
create mode 100644 superset-frontend/src/dashboard/util/getSliceHeaderTooltip.tsx
rename superset-frontend/src/dashboard/util/{findPermission.test.ts => permissionUtils.test.ts} (74%)
rename superset-frontend/src/dashboard/util/{findPermission.ts => permissionUtils.ts} (78%)
create mode 100644 superset-frontend/src/dashboard/util/useFilterFocusHighlightStyles.test.tsx
create mode 100644 superset-frontend/src/dashboard/util/useFilterFocusHighlightStyles.ts
create mode 100644 superset-frontend/src/embedded/api.tsx
delete mode 100644 superset-frontend/src/explore/App.jsx
create mode 100644 superset-frontend/src/explore/ExplorePage.tsx
create mode 100644 superset-frontend/src/explore/actions/datasourcesActions.test.ts
create mode 100644 superset-frontend/src/explore/actions/datasourcesActions.ts
create mode 100644 superset-frontend/src/explore/actions/hydrateExplore.test.ts
create mode 100644 superset-frontend/src/explore/actions/hydrateExplore.ts
create mode 100644 superset-frontend/src/explore/actions/saveModalActions.test.js
create mode 100644 superset-frontend/src/explore/components/controls/ColorSchemeControl/ColorSchemeLabel.test.tsx
create mode 100644 superset-frontend/src/explore/components/controls/ColorSchemeControl/ColorSchemeLabel.tsx
delete mode 100644 superset-frontend/src/explore/components/controls/ColorSchemeControl/index.jsx
create mode 100644 superset-frontend/src/explore/components/controls/ColorSchemeControl/index.tsx
create mode 100644 superset-frontend/src/explore/components/controls/DateFilterControl/components/DateLabel.tsx
rename superset-frontend/src/explore/components/controls/DateFilterControl/{components => tests}/AdvancedFrame.test.tsx (97%)
rename superset-frontend/src/explore/components/controls/DateFilterControl/{components => tests}/CustomFrame.test.tsx (95%)
create mode 100644 superset-frontend/src/explore/components/controls/DateFilterControl/tests/DateFilterLabel.test.tsx
rename superset-frontend/src/explore/components/controls/DateFilterControl/{utils => tests}/utils.test.ts (100%)
create mode 100644 superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndAdhocFilterOption.tsx
delete mode 100644 superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption/index.jsx
create mode 100644 superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption/index.tsx
create mode 100644 superset-frontend/src/explore/components/controls/FilterControl/utils/index.ts
create mode 100644 superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocFilter.tsx
create mode 100644 superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts
create mode 100644 superset-frontend/src/explore/components/controls/FilterControl/utils/useGetTimeRangeLabel.test.ts
create mode 100644 superset-frontend/src/explore/components/controls/FilterControl/utils/useGetTimeRangeLabel.tsx
create mode 100644 superset-frontend/src/explore/components/controls/ViewQuery.tsx
create mode 100644 superset-frontend/src/explore/components/controls/ViewQueryModalFooter.tsx
rename superset-frontend/src/{dashboard/stylesheets/components/divider.less => explore/components/controls/XAxisSortControl.tsx} (61%)
create mode 100644 superset-frontend/src/explore/components/useExploreAdditionalActionsMenu/DashboardsSubMenu.test.tsx
create mode 100644 superset-frontend/src/explore/components/useExploreAdditionalActionsMenu/DashboardsSubMenu.tsx
create mode 100644 superset-frontend/src/explore/controlUtils/getControlValuesCompatibleWithDatasource.test.ts
create mode 100644 superset-frontend/src/explore/controlUtils/getFormDataFromDashboardContext.test.ts
create mode 100644 superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts
create mode 100644 superset-frontend/src/explore/exploreUtils/getParsedExploreURLParams.test.ts
create mode 100644 superset-frontend/src/explore/exploreUtils/getParsedExploreURLParams.ts
delete mode 100644 superset-frontend/src/explore/index.jsx
delete mode 100644 superset-frontend/src/explore/main.less
rename superset-frontend/src/{dashboard/util/findParentId.js => explore/reducers/datasourcesReducer.ts} (51%)
delete mode 100644 superset-frontend/src/explore/reducers/getInitialState.ts
create mode 100644 superset-frontend/src/hooks/apiResources/schemas.test.ts
create mode 100644 superset-frontend/src/hooks/apiResources/schemas.ts
create mode 100644 superset-frontend/src/hooks/apiResources/tables.test.ts
create mode 100644 superset-frontend/src/hooks/apiResources/tables.ts
rename superset-frontend/src/{explore/components/DataTablesPane/utils.ts => hooks/useTruncation/index.ts} (80%)
create mode 100644 superset-frontend/src/hooks/useTruncation/useCSSTextTruncation.ts
rename superset-frontend/src/{dashboard/components/nativeFilters/FilterCard/useTruncation.ts => hooks/useTruncation/useChildElementTruncation.ts} (62%)
create mode 100644 superset-frontend/src/pages/ChartCreation/ChartCreation.test.tsx
rename superset-frontend/src/{addSlice/AddSliceContainer.tsx => pages/ChartCreation/index.tsx} (62%)
rename superset-frontend/src/{views/CRUD/chart => pages/ChartList}/ChartCard.tsx (96%)
rename superset-frontend/src/{views/CRUD/chart => pages/ChartList}/ChartList.test.jsx (98%)
rename superset-frontend/src/{views/CRUD/chart/ChartList.tsx => pages/ChartList/index.tsx} (87%)
rename superset-frontend/src/setup/{setupDasboardComponents.ts => setupDashboardComponents.ts} (100%)
rename superset-frontend/{cypress-base/cypress/integration/alerts_and_reports/alert_report.helper.ts => src/setup/setupExtensions.ts} (88%)
rename superset-frontend/{cypress-base/cypress/integration/database/helper.ts => src/types/ChartSource.ts} (91%)
create mode 100644 superset-frontend/src/types/DashboardContextForExplore.ts
create mode 100644 superset-frontend/src/utils/datasourceUtils.js
create mode 100644 superset-frontend/src/utils/findPermission.test.ts
create mode 100644 superset-frontend/src/utils/findPermission.ts
create mode 100644 superset-frontend/src/utils/getBootstrapData.ts
create mode 100644 superset-frontend/src/utils/getDatasourceUid.test.ts
rename superset-frontend/src/{addSlice/index.tsx => utils/getDatasourceUid.ts} (81%)
create mode 100644 superset-frontend/src/utils/isBot.ts
create mode 100644 superset-frontend/src/utils/isDashboardVirtualizationEnabled.ts
create mode 100644 superset-frontend/src/utils/urlUtils.test.ts
create mode 100644 superset-frontend/src/views/CRUD/data/database/DatabaseModal/SSHTunnelForm.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/database/DatabaseModal/SSHTunnelSwitch.tsx
delete mode 100644 superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.jsx
create mode 100644 superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/AddDataset.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.stories.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/DatasetPanel.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/MessageContent.tsx
rename superset-frontend/{packages/superset-ui-chart-controls/src/shared-controls/emitFilterControl.tsx => src/views/CRUD/data/dataset/AddDataset/DatasetPanel/fixtures.ts} (57%)
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/index.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/DatasetPanel/types.ts
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/EditDataset.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/UsageTab/index.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/EditDataset/index.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/Footer/Footer.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/Footer/index.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/Header/Header.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/Header/index.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/LeftPanel/LeftPanel.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/LeftPanel/index.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/RightPanel/RightPanel.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/RightPanel/index.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDataset/index.tsx
rename superset-frontend/src/{dashboard/stylesheets/grid.less => views/CRUD/data/dataset/AddDataset/types.tsx} (50%)
delete mode 100644 superset-frontend/src/views/CRUD/data/dataset/AddDatasetModal.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/DatasetLayout/DatasetLayout.test.tsx
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/DatasetLayout/index.tsx
rename superset-frontend/src/views/CRUD/data/dataset/{DatasetList.test.jsx => DatasetList.test.tsx} (79%)
create mode 100644 superset-frontend/src/views/CRUD/data/dataset/styles.ts
create mode 100644 superset-frontend/src/views/QueryProvider.tsx
create mode 100644 superset-frontend/src/views/components/RightMenu.test.tsx
rename superset-frontend/src/views/components/{MenuRight.tsx => RightMenu.tsx} (65%)
create mode 100644 superset-frontend/src/visualizations/FilterBox/images/example1.jpg
create mode 100644 superset-frontend/src/visualizations/FilterBox/images/example2.jpg
create mode 100644 superset-frontend/src/visualizations/TimeTable/images/example.jpg
rename superset/{db_engines => available_domains}/__init__.py (100%)
create mode 100644 superset/available_domains/api.py
create mode 100644 superset/available_domains/schemas.py
create mode 100644 superset/common/utils/time_range_utils.py
delete mode 100644 superset/connectors/connector_registry.py
delete mode 100644 superset/dao/datasource/dao.py
create mode 100644 superset/databases/commands/tables.py
create mode 100644 superset/databases/ssh_tunnel/__init__.py
create mode 100644 superset/databases/ssh_tunnel/commands/__init__.py
create mode 100644 superset/databases/ssh_tunnel/commands/create.py
create mode 100644 superset/databases/ssh_tunnel/commands/delete.py
create mode 100644 superset/databases/ssh_tunnel/commands/exceptions.py
create mode 100644 superset/databases/ssh_tunnel/commands/update.py
create mode 100644 superset/databases/ssh_tunnel/dao.py
create mode 100644 superset/databases/ssh_tunnel/models.py
create mode 100644 superset/datasets/commands/duplicate.py
delete mode 100644 superset/datasets/commands/samples.py
create mode 100644 superset/datasource/__init__.py
create mode 100644 superset/datasource/api.py
create mode 100644 superset/datasource/dao.py
create mode 100644 superset/db_engine_specs/dynamodb.py
rename superset/{common/request_contexed_based.py => db_engine_specs/risingwave.py} (73%)
create mode 100644 superset/db_engine_specs/spark.py
delete mode 100644 superset/db_engines/hive.py
create mode 100644 superset/examples/supported_charts_dashboard.py
create mode 100644 superset/explore/api.py
create mode 100644 superset/explore/commands/__init__.py
create mode 100644 superset/explore/commands/get.py
create mode 100644 superset/explore/commands/parameters.py
create mode 100644 superset/explore/exceptions.py
create mode 100644 superset/explore/schemas.py
create mode 100644 superset/extensions/ssh.py
rename tests/integration_tests/db_engine_specs/kylin_tests.py => superset/extensions/stats_logger.py (60%)
create mode 100644 superset/migrations/shared/migrate_viz/__init__.py
create mode 100644 superset/migrations/shared/migrate_viz/base.py
create mode 100644 superset/migrations/shared/migrate_viz/processors.py
create mode 100644 superset/migrations/versions/2022-06-19_16-17_f3afaf1f11f0_add_unique_name_desc_rls.py
create mode 100644 superset/migrations/versions/2022-06-27_14-59_7fb8bca906d2_permalink_rename_filterstate.py
create mode 100644 superset/migrations/versions/2022-07-05_15-48_409c7b420ab0_add_created_by_fk_as_owner.py
rename tests/integration_tests/db_engine_specs/drill_tests.py => superset/migrations/versions/2022-07-07_00-00_cdcf3d64daf4_add_user_id_dttm_idx_to_log_model.py (58%)
create mode 100644 superset/migrations/versions/2022-07-07_13-00_c747c78868b6_migrating_legacy_treemap.py
create mode 100644 superset/migrations/versions/2022-07-07_14-00_06e1e70058c7_migrating_legacy_area.py
create mode 100644 superset/migrations/versions/2022-07-11_11-26_ffa79af61a56_rename_report_schedule_extra_to_extra_.py
create mode 100644 superset/migrations/versions/2022-07-19_15-16_a39867932713_query_context_to_mediumtext.py
create mode 100644 superset/migrations/versions/2022-08-16_15-23_6d3c6f9d665d_fix_table_chart_conditional_formatting_.py
create mode 100644 superset/migrations/versions/2022-08-31_19-30_291f024254b5_drop_column_allow_multi_schema_metadata_fetch.py
create mode 100644 superset/migrations/versions/2022-10-03_17-34_deb4c9d4a4ef_parameters_in_saved_queries.py
create mode 100644 superset/migrations/versions/2022-10-20_10-48_f3c2d8ec8595_create_ssh_tunnel_credentials_tbl.py
create mode 100644 superset/migrations/versions/2022-11-28_17-51_4ce1d9b25135_remove_filter_bar_orientation.py
rename superset/{models/reports.py => reports/models.py} (92%)
create mode 100644 superset/reports/types.py
create mode 100644 superset/sqllab/api.py
create mode 100644 superset/sqllab/commands/__init__.py
rename superset/sqllab/{command.py => commands/execute.py} (96%)
create mode 100644 superset/sqllab/commands/export.py
create mode 100644 superset/sqllab/commands/results.py
create mode 100644 superset/sqllab/schemas.py
create mode 100644 superset/tags/__init__.py
create mode 100644 superset/tags/core.py
rename superset/{models/tags.py => tags/models.py} (84%)
create mode 100644 superset/tasks/exceptions.py
create mode 100644 superset/tasks/types.py
create mode 100644 superset/tasks/utils.py
delete mode 100644 superset/templates/appbuilder/navbar_right.html
delete mode 100644 superset/templates/superset/add_slice.html
create mode 100644 superset/templates/superset/form_view/csv_macros.html
create mode 100644 superset/templates/superset/form_view/csv_scripts.html
create mode 100644 superset/thumbnails/__init__.py
create mode 100644 superset/thumbnails/digest.py
create mode 100644 superset/utils/excel.py
create mode 100644 superset/utils/file.py
create mode 100644 superset/utils/ssh_tunnel.py
create mode 100644 superset/views/datasource/utils.py
create mode 100644 superset/views/explore.py
create mode 100644 superset/views/log/dao.py
create mode 100644 superset/views/log/schemas.py
create mode 100644 superset/views/sql_lab/__init__.py
create mode 100644 superset/views/sql_lab/schemas.py
rename superset/views/{sql_lab.py => sql_lab/views.py} (91%)
create mode 100644 tests/integration_tests/available_domains/__init__.py
create mode 100644 tests/integration_tests/available_domains/api_tests.py
delete mode 100644 tests/integration_tests/config_tests.py
delete mode 100644 tests/integration_tests/databases/schema_tests.py
create mode 100644 tests/integration_tests/databases/ssh_tunnel/__init__.py
create mode 100644 tests/integration_tests/databases/ssh_tunnel/commands/__init__.py
create mode 100644 tests/integration_tests/databases/ssh_tunnel/commands/commands_tests.py
delete mode 100644 tests/integration_tests/datasets/model_tests.py
create mode 100644 tests/integration_tests/datasource/__init__.py
create mode 100644 tests/integration_tests/datasource/api_tests.py
delete mode 100644 tests/integration_tests/db_engine_specs/clickhouse_tests.py
delete mode 100644 tests/integration_tests/db_engine_specs/crate_tests.py
create mode 100644 tests/integration_tests/db_engine_specs/databricks_tests.py
delete mode 100644 tests/integration_tests/db_engine_specs/druid_tests.py
delete mode 100644 tests/integration_tests/db_engine_specs/elasticsearch_tests.py
delete mode 100644 tests/integration_tests/db_engine_specs/firebird_tests.py
delete mode 100644 tests/integration_tests/db_engine_specs/firebolt_tests.py
delete mode 100644 tests/integration_tests/db_engine_specs/oracle_tests.py
delete mode 100644 tests/integration_tests/db_engine_specs/trino_tests.py
create mode 100644 tests/integration_tests/embedded/test_view.py
create mode 100644 tests/integration_tests/explore/api_tests.py
rename tests/integration_tests/{db_engine_specs/dremio_tests.py => fixtures/tags.py} (57%)
create mode 100644 tests/integration_tests/migrations/06e1e70058c7_migrate_legacy_area__tests.py
create mode 100644 tests/integration_tests/migrations/c747c78868b6_migrating_legacy_treemap__tests.py
create mode 100644 tests/integration_tests/reports/commands/create_dashboard_report_tests.py
create mode 100644 tests/integration_tests/reports/commands/execute_dashboard_report_tests.py
create mode 100644 tests/integration_tests/sql_lab/__init__.py
create mode 100644 tests/integration_tests/sql_lab/api_tests.py
create mode 100644 tests/integration_tests/sql_lab/commands_tests.py
create mode 100644 tests/integration_tests/sql_lab/conftest.py
create mode 100644 tests/integration_tests/sql_lab/test_execute_sql_statements.py
delete mode 100644 tests/integration_tests/utils/decorators_tests.py
create mode 100644 tests/unit_tests/charts/dao/__init__.py
create mode 100644 tests/unit_tests/charts/dao/dao_tests.py
create mode 100644 tests/unit_tests/commands/importers/__init__.py
create mode 100644 tests/unit_tests/commands/importers/v1/__init__.py
create mode 100644 tests/unit_tests/commands/importers/v1/assets_test.py
create mode 100644 tests/unit_tests/common/test_dataframe_utils.py
create mode 100644 tests/unit_tests/common/test_time_range_utils.py
create mode 100644 tests/unit_tests/config_test.py
create mode 100644 tests/unit_tests/databases/commands/test_connection_test.py
create mode 100644 tests/unit_tests/databases/dao/__init__.py
create mode 100644 tests/unit_tests/databases/dao/dao_tests.py
create mode 100644 tests/unit_tests/databases/schema_tests.py
create mode 100644 tests/unit_tests/databases/ssh_tunnel/__init__.py
create mode 100644 tests/unit_tests/databases/ssh_tunnel/commands/__init__.py
create mode 100644 tests/unit_tests/databases/ssh_tunnel/commands/create_test.py
create mode 100644 tests/unit_tests/databases/ssh_tunnel/commands/delete_test.py
create mode 100644 tests/unit_tests/databases/ssh_tunnel/commands/update_test.py
create mode 100644 tests/unit_tests/databases/ssh_tunnel/dao_tests.py
create mode 100644 tests/unit_tests/datasets/dao/__init__.py
create mode 100644 tests/unit_tests/datasets/dao/dao_tests.py
delete mode 100644 tests/unit_tests/datasets/test_models.py
rename tests/unit_tests/{dao/datasource_test.py => datasource/dao_tests.py} (68%)
create mode 100644 tests/unit_tests/db_engine_specs/test_clickhouse.py
create mode 100644 tests/unit_tests/db_engine_specs/test_crate.py
create mode 100644 tests/unit_tests/db_engine_specs/test_databricks.py
create mode 100644 tests/unit_tests/db_engine_specs/test_dremio.py
create mode 100644 tests/unit_tests/db_engine_specs/test_druid.py
create mode 100644 tests/unit_tests/db_engine_specs/test_duckdb.py
create mode 100644 tests/unit_tests/db_engine_specs/test_dynamodb.py
create mode 100644 tests/unit_tests/db_engine_specs/test_elasticsearch.py
create mode 100644 tests/unit_tests/db_engine_specs/test_firebird.py
create mode 100644 tests/unit_tests/db_engine_specs/test_firebolt.py
rename tests/{integration_tests/db_engine_specs/hana_tests.py => unit_tests/db_engine_specs/test_hana.py} (57%)
create mode 100644 tests/unit_tests/db_engine_specs/test_hive.py
create mode 100644 tests/unit_tests/db_engine_specs/test_impala.py
create mode 100644 tests/unit_tests/db_engine_specs/test_init.py
create mode 100644 tests/unit_tests/db_engine_specs/test_kylin.py
create mode 100644 tests/unit_tests/db_engine_specs/test_mysql.py
create mode 100644 tests/unit_tests/db_engine_specs/test_oracle.py
create mode 100644 tests/unit_tests/db_engine_specs/test_postgres.py
create mode 100644 tests/unit_tests/db_engine_specs/test_rockset.py
create mode 100644 tests/unit_tests/db_engine_specs/utils.py
create mode 100644 tests/unit_tests/explore/api_test.py
create mode 100644 tests/unit_tests/fixtures/__init__.py
create mode 100644 tests/unit_tests/fixtures/assets_configs.py
create mode 100644 tests/unit_tests/models/__init__.py
create mode 100644 tests/unit_tests/models/core_test.py
create mode 100644 tests/unit_tests/notifications/email_tests.py
create mode 100644 tests/unit_tests/pandas_postprocessing/test_utils.py
create mode 100644 tests/unit_tests/tasks/__init__.py
create mode 100644 tests/unit_tests/tasks/test_utils.py
create mode 100644 tests/unit_tests/thumbnails/__init__.py
create mode 100644 tests/unit_tests/thumbnails/test_digest.py
rename tests/{integration_tests/db_engine_specs/impala_tests.py => unit_tests/utils/log_tests.py} (62%)
create mode 100644 tests/unit_tests/utils/test_core.py
create mode 100644 tests/unit_tests/utils/test_decorators.py
create mode 100644 tests/unit_tests/utils/test_file.py
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index e2f6a79affc5..27aebdb4220b 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -10,10 +10,16 @@
.github/workflows/docker-ephemeral-env.yml @robdiciuccio @craig-rueda @rusackas @eschutho @dpgaspar @nytai @mistercrunch
.github/workflows/ephemeral*.yml @robdiciuccio @craig-rueda @rusackas @eschutho @dpgaspar @nytai @mistercrunch
-# Notify some committers of changes in the Select component
+# Notify some committers of changes in the components
/superset-frontend/src/components/Select/ @michael-s-molina @geido @ktmud
+/superset-frontend/src/components/MetadataBar/ @michael-s-molina
+/superset-frontend/src/components/DropdownContainer/ @michael-s-molina
# Notify Helm Chart maintainers about changes in it
/helm/superset/ @craig-rueda @dpgaspar @villebro
+
+# Notify E2E test maintainers of changes
+
+/superset-frontend/cypress-base/ @jinghua-qa @geido @eschutho @rusackas @betodealmeida
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 0e506cf9fb92..f821eb35246b 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,6 +1,6 @@
---
name: Bug report
-about: Create a report to help us improve
+about: Create a report to help us improve Superset's stability! For feature requests please open a discussion at https://github.com/apache/superset/discussions/categories/ideas
labels: "#bug"
---
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index 8e6e0da9c959..000000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-labels: "#enhancement"
-
----
-
-Github Discussions is our new home for discussing features and improvements!
-
-https://github.com/apache/superset/discussions/categories/ideas
-
-We'd like to keep Github Issues focuses on bugs and SIP's (Superset Improvement Proposals)!
-
-Please note that feature requests opened as Github Issues will be moved to Discussions.
diff --git a/.github/ISSUE_TEMPLATE/sip.md b/.github/ISSUE_TEMPLATE/sip.md
index 6c526d6d1fa0..c2b0a14b9140 100644
--- a/.github/ISSUE_TEMPLATE/sip.md
+++ b/.github/ISSUE_TEMPLATE/sip.md
@@ -1,14 +1,16 @@
---
name: SIP
-about: Superset Improvement Proposal
+about: Superset Improvement Proposal (See SIP-0: https://github.com/apache/superset/issues/5602)
labels: "#SIP"
+title: "[SIP] Your Title Here (do not add SIP number)"
+asignees: "apache/superset-committers"
---
*Please make sure you are familiar with the SIP process documented*
-(here)[https://github.com/apache/superset/issues/5602]. The SIP number should be the next number after the latest SIP listed [here](https://github.com/apache/superset/issues?q=is%3Aissue+label%3Asip).
+(here)[https://github.com/apache/superset/issues/5602]. The SIP will be numbered by a committer upon acceptance.
-## [SIP-\] Proposal for
+## [SIP] Proposal for ...
### Motivation
diff --git a/.github/actions/chart-testing-action b/.github/actions/chart-testing-action
index b0d4458c7115..afea100a5135 160000
--- a/.github/actions/chart-testing-action
+++ b/.github/actions/chart-testing-action
@@ -1 +1 @@
-Subproject commit b0d4458c71155b54fcf33e11dd465dc923550009
+Subproject commit afea100a513515fbd68b0e72a7bb0ae34cb62aec
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 493868eab966..7320c23a1432 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -7,6 +7,7 @@ updates:
labels:
- npm
- dependabot
+ versioning-strategy: increase
- package-ecosystem: "pip"
directory: "/requirements/"
@@ -21,9 +22,29 @@ updates:
schedule:
interval: "daily"
open-pull-requests-limit: 0
+ versioning-strategy: increase
- package-ecosystem: "npm"
directory: "/docs/"
schedule:
interval: "daily"
open-pull-requests-limit: 0
+ versioning-strategy: increase
+
+ - package-ecosystem: "npm"
+ directory: "/superset-websocket/"
+ schedule:
+ interval: "daily"
+ labels:
+ - npm
+ - dependabot
+ versioning-strategy: increase
+
+ - package-ecosystem: "npm"
+ directory: "/superset-websocket/utils/client-ws-app/"
+ schedule:
+ interval: "daily"
+ labels:
+ - npm
+ - dependabot
+ versioning-strategy: increase
diff --git a/.github/workflows/bashlib.sh b/.github/workflows/bashlib.sh
index ae10c342e854..3eb460f7fd85 100644
--- a/.github/workflows/bashlib.sh
+++ b/.github/workflows/bashlib.sh
@@ -183,7 +183,7 @@ cypress-run-all() {
nohup flask run --no-debugger -p $port >"$flasklog" 2>&1 "$flasklog" 2>&1 "$flasklog" 2>&1 > $GITHUB_PATH
+ eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
+ echo "HOMEBREW_PREFIX=$HOMEBREW_PREFIX" >>"${GITHUB_ENV}"
+ echo "HOMEBREW_CELLAR=$HOMEBREW_CELLAR" >>"${GITHUB_ENV}"
+ echo "HOMEBREW_REPOSITORY=$HOMEBREW_REPOSITORY" >>"${GITHUB_ENV}"
+ brew install norwoodj/tap/helm-docs
- name: pre-commit
run: pre-commit run --all-files
@@ -97,8 +106,8 @@ jobs:
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- cache: 'pip'
- cache-dependency-path: 'requirements/base.txt'
+ cache: "pip"
+ cache-dependency-path: "requirements/base.txt"
- name: Install dependencies
uses: ./.github/actions/cached-dependencies
with:
diff --git a/.github/workflows/superset-python-presto-hive.yml b/.github/workflows/superset-python-presto-hive.yml
index 097b2f45adf9..875901b1ec6d 100644
--- a/.github/workflows/superset-python-presto-hive.yml
+++ b/.github/workflows/superset-python-presto-hive.yml
@@ -41,7 +41,7 @@ jobs:
# GitHub action runner's default installations
- 15433:8080
redis:
- image: redis:5-alpine
+ image: redis:7-alpine
ports:
- 16379:6379
steps:
@@ -110,7 +110,7 @@ jobs:
# GitHub action runner's default installations
- 15432:5432
redis:
- image: redis:5-alpine
+ image: redis:7-alpine
ports:
- 16379:6379
steps:
diff --git a/.github/workflows/superset-websocket.yml b/.github/workflows/superset-websocket.yml
index 8a8dc9de2cac..2f4b0aea04a0 100644
--- a/.github/workflows/superset-websocket.yml
+++ b/.github/workflows/superset-websocket.yml
@@ -18,7 +18,7 @@ jobs:
persist-credentials: false
- name: Install dependencies
working-directory: ./superset-websocket
- run: npm install
+ run: npm ci
- name: lint
working-directory: ./superset-websocket
run: npm run lint
diff --git a/.github/workflows/welcome-new-users.yml b/.github/workflows/welcome-new-users.yml
index e55028af9446..ae16bf49c649 100644
--- a/.github/workflows/welcome-new-users.yml
+++ b/.github/workflows/welcome-new-users.yml
@@ -8,18 +8,15 @@ jobs:
welcome:
runs-on: ubuntu-latest
permissions:
- issues: write
+ pull-requests: write
steps:
- name: Welcome Message
- uses: actions/first-interaction@v1.0.0
+ uses: actions/first-interaction@v1
+ continue-on-error: true
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
pr-message: |-
Congrats on making your first PR and thank you for contributing to Superset! :tada: :heart:
- We hope to see you in our [Slack](https://apache-superset.slack.com/) community too!
- - name: First Time Label
- uses: andymckay/labeler@master
- with:
- add-labels: "new:contributor"
- repo-token: ${{ secrets.GITHUB_TOKEN }}
+
+ We hope to see you in our [Slack](https://apache-superset.slack.com/) community too! Not signed up? Use our [Slack App](http://bit.ly/join-superset-slack) to self-register.
diff --git a/.markdownlint.json b/.markdownlint.json
new file mode 100644
index 000000000000..dcc40721cea2
--- /dev/null
+++ b/.markdownlint.json
@@ -0,0 +1,4 @@
+{
+ "no-bare-urls": false,
+ "line-length": false
+}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b43e10c2cb78..aa0cf4af62d1 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -16,7 +16,7 @@
#
repos:
- repo: https://github.com/PyCQA/isort
- rev: 5.9.3
+ rev: 5.12.0
hooks:
- id: isort
- repo: https://github.com/pre-commit/mirrors-mypy
@@ -49,11 +49,16 @@ repos:
rev: v2.4.1 # Use the sha or tag you want to point at
hooks:
- id: prettier
- args: ['--ignore-path=./superset-frontend/.prettierignore']
- files: 'superset-frontend'
+ args: ["--ignore-path=./superset-frontend/.prettierignore"]
+ files: "superset-frontend"
# blacklist unsafe functions like make_url (see #19526)
- repo: https://github.com/skorokithakis/blacklist-pre-commit-hook
rev: e2f070289d8eddcaec0b580d3bde29437e7c8221
hooks:
- id: blacklist
args: ["--blacklisted-names=make_url", "--ignore=tests/"]
+ - repo: https://github.com/norwoodj/helm-docs
+ rev: v1.11.0
+ hooks:
+ - id: helm-docs
+ files: helm
diff --git a/.pylintrc b/.pylintrc
index 8814957194ba..848767fe5dcb 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -134,7 +134,9 @@ include-naming-hint=no
# List of decorators that produce properties, such as abc.abstractproperty. Add
# to this list to register other decorators that produce valid properties.
-property-classes=abc.abstractproperty
+property-classes=
+ abc.abstractproperty,
+ sqlalchemy.ext.hybrid.hybrid_property
# Regular expression matching correct argument names
argument-rgx=[a-z_][a-z0-9_]{2,30}$
@@ -303,7 +305,7 @@ ignored-modules=numpy,pandas,alembic.op,sqlalchemy,alembic.context,flask_appbuil
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
# qualified names.
-ignored-classes=contextlib.closing,optparse.Values,thread._local,_thread._local,sqlalchemy.orm.scoping.scoped_session
+ignored-classes=contextlib.closing,optparse.Values,thread._local,_thread._local
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b48fd53560b9..31a7e33c0737 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -570,6 +570,625 @@ under the License.
- [#19016](https://github.com/apache/superset/pull/19016) chore: Adding PR to Updating.md (@AAfghahi)
- [#18970](https://github.com/apache/superset/pull/18970) chore: Change Dataset legacy editor flag to true (@AAfghahi)
+- [2.0.1](#201-fri-nov-4-103402-2022--0400)
+- [2.0.0](#200-tue-jun-28-085302-2022--0400)
+- [1.5.3 (LTS)](#153-thu-jan-5-150544-2023--0500)
+- [1.5.2](#152-wed-sep-14-171151-2022-0530)
+- [1.5.1](#151-thu-may-26-144520-2022-0300)
+- [1.5.0](#150-fri-apr-22-172330-2022--0400)
+- [1.4.2](#142-sat-mar-19-000806-2022-0200)
+- [1.4.1](#141)
+
+### 2.0.1 (Fri Nov 4 10:34:02 2022 -0400)
+
+**Database Migrations**
+
+**Features**
+
+**Fixes**
+
+- [#22417](https://github.com/apache/superset/pull/22417) fix: fix: Force configuration for SafeMarkdown component in Handlebars(@geido)
+- [#21895](https://github.com/apache/superset/pull/21895) feat: Improves SafeMarkdown HTML sanitization (@michael-s-molina) (security-improvement)
+- [#21874](https://github.com/apache/superset/pull/21874) feat: Adds a Content Security Policy (CSP) check for production environments (@michael-s-molina)(security-improvement)
+- [#21853](https://github.com/apache/superset/pull/21853) feat: Disables HTML rendering in Toast by default (@michael-s-molina)(security-improvement)
+- [#21776](https://github.com/apache/superset/pull/21776) fix(CustomFrame): Resolves issue #21731 where date range in explore throws runtime error (@eric-briscoe)
+- [#21637](https://github.com/apache/superset/pull/21637) fix: respect chart cache timeout setting (@mayurnewase)
+- [#21729](https://github.com/apache/superset/pull/21729) fix: allow adhoc columns in non-aggregate query (@mayurnewase)
+- [#21441](https://github.com/apache/superset/pull/21441) fix(cache): respect default cache timeout on v1 chart data requests (@villebro)
+- [#22038](https://github.com/apache/superset/pull/22038) fix: datasource save, improve data validation (@dpgaspar)
+- [#22022](https://github.com/apache/superset/pull/22022) fix: deprecate approve and request_access endpoint (@dpgaspar)
+- [#21964](https://github.com/apache/superset/pull/21964) fix: dashboard api cache decorator (@dpgaspar)
+- [#21875](https://github.com/apache/superset/pull/21875) fix: check that imports are ZIPs (@betodealmeida)
+- [#21761](https://github.com/apache/superset/pull/21761) fix: flash message on database data upload forms (@dpgaspar)
+- [#21759](https://github.com/apache/superset/pull/21759) fix: database schema selector on import data (@dpgaspar)
+- [#21729](https://github.com/apache/superset/pull/21729) fix: allow adhoc columns in non-aggregate query (@mayurnewase)
+- [#21773](https://github.com/apache/superset/pull/21773) fix: remove deprecated ETagResponseMixin (@eschutho)
+- [#21561](https://github.com/apache/superset/pull/21561) fix(report): Fix permission check for set up email report on charts/dashboards. Fixes #21559 (@zhaorui2022)
+- [#20651](https://github.com/apache/superset/pull/20651) fix: annotation broken (@zhaoyongjie)
+- [#20830](https://github.com/apache/superset/pull/20830) fix: remove element reference in alerts report fetchs (@hughhhh)
+- [#20063](https://github.com/apache/superset/pull/20063) fix: Add locale for DatePicker component (@aehanno)
+- [#21302](https://github.com/apache/superset/pull/21302) fix: disallow users from viewing other user's profile on config (@dpgaspar)
+- [#21154](https://github.com/apache/superset/pull/21154) fix(explore): Prevent unnecessary series limit subquery (@codyml)
+- [#21498](https://github.com/apache/superset/pull/21498) fix: set correct favicon from config for login and FAB list views (@mayurnewase)
+- [#21380](https://github.com/apache/superset/pull/21380) fix(sqllab): Fix cursor alignment in SQL lab editor by avoiding Lucida Console font on Windows (@MichaelHintz)
+- [#20061](https://github.com/apache/superset/pull/20061) fix: Add french translation missing (@aehanno)
+- [#21044](https://github.com/apache/superset/pull/21044) fix(plugin-chart-echarts): missing value format in mixed timeseries (@justinpark)
+- [#21419](https://github.com/apache/superset/pull/21419) fix: cached common bootstrap Revert (#21018) (@dpgaspar)
+- [#21296](https://github.com/apache/superset/pull/21296) fix(plugin-chart-echarts): show zero value in tooltip (@villebro)
+- [#21294](https://github.com/apache/superset/pull/21294) fix(explore): Time column label not formatted when GENERIC_X_AXES enabled (@kgabryje)
+- [#21272](https://github.com/apache/superset/pull/21272) fix: adds TLS certificate validation option for SMTP (@dpgaspar)
+- [#21076](https://github.com/apache/superset/pull/21076) fix(celery cache warmup): add auth and use warm_up_cache endpoint (@nytai)
+- [#21216](https://github.com/apache/superset/pull/21216) fix(database-list): hide upload file button if no permission (@stephenLYZ)
+- [#21153](https://github.com/apache/superset/pull/21153) fix(sqllab): missing zero values while copy-to-clipboard (@justinpark)
+- [#21084](https://github.com/apache/superset/pull/21084) fix(native filters): groupby filter issue (@stevetracvc)
+- [#21005](https://github.com/apache/superset/pull/21005) fix(plugin-chart-handlebars): Sort-By and Sort-By-Descending control not work (@stephenLYZ)
+- [#20969](https://github.com/apache/superset/pull/20969) fix(dashboard): Fix scroll behaviour in DashboardBuilderSidepane (@EugeneTorap)
+- [#21007](https://github.com/apache/superset/pull/21007) fix(plugin-chart-echarts): gauge chart enhancements and fixes (@stephenLYZ)
+- [#21032](https://github.com/apache/superset/pull/21032) fix(plugin-chart-echarts): invalid total label location for negative values in stacked bar chart (@justinpark)
+- [#20962](https://github.com/apache/superset/pull/20962) fix: Explore scrolled down when navigating from dashboard (@kgabryje)
+- [#20946](https://github.com/apache/superset/pull/20946) fix(viz): Show zero percent changes in Big Number Viz (@Antonio-RiveroMartnez)
+- [#20819](https://github.com/apache/superset/pull/20819) fix: Temporal X Axis values are not properly displayed if the time column has a custom label defined (@diegomedina248)
+- [#20736](https://github.com/apache/superset/pull/20736) fix: getting default value in run-server.sh (@zhaoyongjie)
+- [#20733](https://github.com/apache/superset/pull/20733) fix(docker): Make Gunicorn max_requests and max_requests_jitter adjustable (@mdeshmu)
+- [#20714](https://github.com/apache/superset/pull/20714) fix: logger message (@betodealmeida)
+
+**Others**
+
+- [#21811](https://github.com/apache/superset/pull/21811) chore(sqla): refactor query utils (@villebro)
+- [#21811](https://github.com/apache/superset/pull/21811) chore(sqla): refactor query utils (@villebro)
+- [#20644](https://github.com/apache/superset/pull/20644) chore(deps): bump moment from 2.29.2 to 2.29.4 in /superset-frontend (@dependabot[bot])
+- [#21721](https://github.com/apache/superset/pull/21721) build: changelog for 2.0.1 (@AAfghahi)
+- [#21018](https://github.com/apache/superset/pull/21018) perf: Memoize the common_bootstrap_payload (@bkyryliuk)
+- [#21091](https://github.com/apache/superset/pull/21091) chore(deps): unpin holidays dependency version (@ecederstrand)
+
+### 2.0.0 (Tue Jun 28 08:53:02 2022 -0400)
+
+**Database Migrations**
+
+- [#20385](https://github.com/apache/superset/pull/20385) fix(migration): Ensure key_value LargeBinary is encoded as a MEDIUMBLOB as opposed to BLOB for MySQL (@john-bodley)
+- [#20284](https://github.com/apache/superset/pull/20284) chore(migrations): Renaming migration files so that they're easier to keep track of (@craig-rueda)
+- [#20108](https://github.com/apache/superset/pull/20108) fix: None dataset and schema permissions (@dpgaspar)
+- [#18794](https://github.com/apache/superset/pull/18794) feat(business-types): initial implementation of SIP-78 (@cccs-RyanS)
+- [#20073](https://github.com/apache/superset/pull/20073) fix(dataset): handle missing sqla uri in migration (@villebro)
+- [#19941](https://github.com/apache/superset/pull/19941) fix(reports): Clear last value when state is WORKING (@john-bodley)
+- [#19675](https://github.com/apache/superset/pull/19675) chore(docs): Spelling (@jsoref)
+- [#19793](https://github.com/apache/superset/pull/19793) fix(SIP-68): handle empty table name during migration (@ktmud)
+- [#19786](https://github.com/apache/superset/pull/19786) fix(migrations): coalesce is_temporal when inserting into sl_columns (@cemremengu)
+- [#19421](https://github.com/apache/superset/pull/19421) perf: refactor SIP-68 db migrations with INSERT SELECT FROM (@ktmud)
+- [#19767](https://github.com/apache/superset/pull/19767) fix: Fix migration for removing time_range_endpoints 3 (@hughhhh)
+- [#19728](https://github.com/apache/superset/pull/19728) fix: Removetime_range_endpoints from query context object pt 2 (@hughhhh)
+- [#19630](https://github.com/apache/superset/pull/19630) chore: clean up unused imports in db migration scripts (@ktmud)
+- [#19577](https://github.com/apache/superset/pull/19577) fix: merge multiple db heads (@eschutho)
+- [#19243](https://github.com/apache/superset/pull/19243) fix: cannot delete a database if team member has SQL editor tab that uses that db (@diegomedina248)
+- [#19537](https://github.com/apache/superset/pull/19537) chore: block unsafe functions (@betodealmeida)
+- [#19513](https://github.com/apache/superset/pull/19513) chore: postpone timerange endpoint removal (@villebro)
+- [#19495](https://github.com/apache/superset/pull/19495) perf: speed up db migration for deprecating time_range_endpoints (@ktmud)
+- [#19474](https://github.com/apache/superset/pull/19474) fix: handle null params in #18936 migration (@serenajiang)
+- [#19423](https://github.com/apache/superset/pull/19423) fix: Remove`time_range_endpoints` from query context object (@hughhhh)
+- [#18936](https://github.com/apache/superset/pull/18936) chore: Remove legacy SIP-15 interim logic/flags (@john-bodley)
+
+**Features**
+
+- [#20377](https://github.com/apache/superset/pull/20377) feat(standardized form data): keep all columns and metrics (@zhaoyongjie)
+- [#20114](https://github.com/apache/superset/pull/20114) feat(chart): Enable caching per user when user impersonation is enabled (@Samira-El)
+- [#20408](https://github.com/apache/superset/pull/20408) feat(plugin-chart-echarts): Support stacking negative and positive values (@kgabryje)
+- [#20278](https://github.com/apache/superset/pull/20278) feat: Prevent dataset edit modal closing on click-away in edit mode (@reesercollins)
+- [#20392](https://github.com/apache/superset/pull/20392) feat: setting limit value when Pie chart switches (@zhaoyongjie)
+- [#20373](https://github.com/apache/superset/pull/20373) feat: adding truncate metric control on timeseries charts (@zhaoyongjie)
+- [#20248](https://github.com/apache/superset/pull/20248) feat(explore): Implement viz switcher redesign (@kgabryje)
+- [#20113](https://github.com/apache/superset/pull/20113) feat(api): Added "kind" to dataset/ endpoint (@reesercollins)
+- [#20299](https://github.com/apache/superset/pull/20299) feat(explore): Dataset Panel Options when Source = Query II (@lyndsiWilliams)
+- [#20320](https://github.com/apache/superset/pull/20320) feat: Databricks native driver (@betodealmeida)
+- [#20313](https://github.com/apache/superset/pull/20313) feat(explore): Denormalize form data in echarts, world map and nvd3 bar and line charts (@kgabryje)
+- [#20277](https://github.com/apache/superset/pull/20277) feat: multiple results pane on explore and dashboard (@zhaoyongjie)
+- [#19898](https://github.com/apache/superset/pull/19898) feat: When editing the label/title in the Metrics popover, hitting Enter should save what you've typed (@diegomedina248)
+- [#16493](https://github.com/apache/superset/pull/16493) feat(plugin-chart-echarts): [feature-parity] support extra control for the area chart V2 (@stephenLYZ)
+- [#19855](https://github.com/apache/superset/pull/19855) feat(explore): Frontend implementation of dataset creation from infobox (@lyndsiWilliams)
+- [#20165](https://github.com/apache/superset/pull/20165) feat: add modfied col and timezone info to schedule col (@pkdotson)
+- [#20144](https://github.com/apache/superset/pull/20144) feat: showing results pane in dashboard (@zhaoyongjie)
+- [#20242](https://github.com/apache/superset/pull/20242) feat: derived metrics use different line style (@zhaoyongjie)
+- [#20010](https://github.com/apache/superset/pull/20010) feat: standardized form_data (@zhaoyongjie)
+- [#19987](https://github.com/apache/superset/pull/19987) feat(superset-ui-core): add feature flag for the analogous colors (@stephenLYZ)
+- [#19881](https://github.com/apache/superset/pull/19881) feat(world-map): support color by metric or country column (@stephenLYZ)
+- [#19981](https://github.com/apache/superset/pull/19981) feat!: pass datasource_type and datasource_id to form_data (@eschutho)
+- [#15241](https://github.com/apache/superset/pull/15241) feat: query datasets from SQL Lab (@betodealmeida)
+- [#20129](https://github.com/apache/superset/pull/20129) feat(explore): Fill dashboard name when adding new chart from dashboard view (@kgabryje)
+- [#20160](https://github.com/apache/superset/pull/20160) feat(explore): Add empty state to annotations (@kgabryje)
+- [#20134](https://github.com/apache/superset/pull/20134) feat: add Query.columns for bootstrap_data (@hughhhh)
+- [#20158](https://github.com/apache/superset/pull/20158) feat: add statsd metrics for notifications (@dpgaspar)
+- [#20052](https://github.com/apache/superset/pull/20052) feat(Helm Chart): Support resource limits and requests for each component (@rathberm)
+- [#20170](https://github.com/apache/superset/pull/20170) feat: add samples endpoint (@zhaoyongjie)
+- [#19381](https://github.com/apache/superset/pull/19381) feat: add drag and drop column rearrangement for table viz (@stevetracvc)
+- [#20136](https://github.com/apache/superset/pull/20136) feat: Add Certified filter to Datasets (@hughhhh)
+- [#20111](https://github.com/apache/superset/pull/20111) feat(dashboard): Chart title click redirects to Explore in new tab (@kgabryje)
+- [#20097](https://github.com/apache/superset/pull/20097) feat(plugin-chart-echarts): add support for generic axis to mixed chart (@villebro)
+- [#20126](https://github.com/apache/superset/pull/20126) feat(dashboard): Add create chart button in dashboard edit mode (@kgabryje)
+- [#20059](https://github.com/apache/superset/pull/20059) feat: Save column data into json_metadata for all Query executions (@hughhhh)
+- [#19918](https://github.com/apache/superset/pull/19918) feat(plugin-chart-echarts): support horizontal bar chart (@stephenLYZ)
+- [#19902](https://github.com/apache/superset/pull/19902) feat: Explore popovers should close on escape (@diegomedina248)
+- [#20049](https://github.com/apache/superset/pull/20049) feat(dashboard): Rearrange items in chart header controls dropdown (@kgabryje)
+- [#20030](https://github.com/apache/superset/pull/20030) feat(sip-68): Add DatasourceDAO class to manage querying different datasources easier (@hughhhh)
+- [#19581](https://github.com/apache/superset/pull/19581) feat(viz-gallery): add search weight for viz-name (@stephenLYZ)
+- [#19999](https://github.com/apache/superset/pull/19999) feat: RLS for SQL Lab (@betodealmeida)
+- [#19993](https://github.com/apache/superset/pull/19993) feat(explore): Show confirmation modal if user exits Explore without saving changes (@kgabryje)
+- [#19873](https://github.com/apache/superset/pull/19873) feat(css): adds `chartId`-based class to dashboard chart holder (@rusackas)
+- [#20002](https://github.com/apache/superset/pull/20002) feat: deprecate /superset/testconn and migrate to api v1 (@zephyring)
+- [#19935](https://github.com/apache/superset/pull/19935) feat: deprecate /superset/validate_sql_json migrate to api v1 (@dpgaspar)
+- [#20015](https://github.com/apache/superset/pull/20015) feat: add new enums for datasource types (@hughhhh)
+- [#19956](https://github.com/apache/superset/pull/19956) feat: Applitools Cypress workflow (@geido)
+- [#19852](https://github.com/apache/superset/pull/19852) feat: Run Applitools on public Storybook (@geido)
+- [#19963](https://github.com/apache/superset/pull/19963) feat: Add cypress test for downloading chart as image (@codemaster08240328)
+- [#19957](https://github.com/apache/superset/pull/19957) feat: switch from `sqlalchemy-trino` to `trino-python-client` (@dungdm93)
+- [#19921](https://github.com/apache/superset/pull/19921) feat: deprecate /superset/extra_table_metadata migrate to api v1 (@dpgaspar)
+- [#19745](https://github.com/apache/superset/pull/19745) feat: simplify SQLite time grain (@betodealmeida)
+- [#19927](https://github.com/apache/superset/pull/19927) feat(chart & legend): make to enable show legend by default (@prosdev0107)
+- [#19754](https://github.com/apache/superset/pull/19754) feat: deprecate old API on core superset fave_dashboards (@dpgaspar)
+- [#19905](https://github.com/apache/superset/pull/19905) feat: simplify `memoized_func` (@betodealmeida)
+- [#19871](https://github.com/apache/superset/pull/19871) feat(filter): make to hide sort filter when time range (@prosdev0107)
+- [#19851](https://github.com/apache/superset/pull/19851) feat: add Advanced Analytics into mixed time series chart (@zhaoyongjie)
+- [#19692](https://github.com/apache/superset/pull/19692) feat: Update ShortKey for stop query running in SqlLab editor (@codemaster08240328)
+- [#17903](https://github.com/apache/superset/pull/17903) feat: Adds plugin-chart-handlebars (@jdbranham)
+- [#19748](https://github.com/apache/superset/pull/19748) feat(explore): improve UI in the control panel (@stephenLYZ)
+- [#19724](https://github.com/apache/superset/pull/19724) feat: 10/15/30 min grain to Pinot (@hughhhh)
+- [#19696](https://github.com/apache/superset/pull/19696) feat(explore): Replace overlay with alert banner when chart controls change (@kgabryje)
+- [#19751](https://github.com/apache/superset/pull/19751) feat(explore): Implement data panel redesign (@kgabryje)
+- [#19598](https://github.com/apache/superset/pull/19598) feat: add empty states to sqlab editor and select (@pkdotson)
+- [#19450](https://github.com/apache/superset/pull/19450) feat: Remove legacy sql alchemy db connection link from G Sheet connection (@codemaster08240328)
+- [#19710](https://github.com/apache/superset/pull/19710) feat: Enabling source maps full time (@rusackas)
+- [#19671](https://github.com/apache/superset/pull/19671) feat: UI override registry (@suddjian)
+- [#19691](https://github.com/apache/superset/pull/19691) feat(explore): More explicit labels of adhoc filter operators (@kgabryje)
+- [#19558](https://github.com/apache/superset/pull/19558) feat(explore): Redesign of Run/Save buttons (@kgabryje)
+- [#19650](https://github.com/apache/superset/pull/19650) feat(embedded): API get embedded dashboard config by uuid (@lilykuang)
+- [#19310](https://github.com/apache/superset/pull/19310) feat(CRUD): add new empty state (@stephenLYZ)
+- [#19622](https://github.com/apache/superset/pull/19622) feat(plugin-chart-echarts): add aggregate total for the Pie/Donuct chart (@stephenLYZ)
+- [#19314](https://github.com/apache/superset/pull/19314) feat: Move Database Import option into DB Connection modal (@lyndsiWilliams)
+- [#19434](https://github.com/apache/superset/pull/19434) feat: deprecate old API and create new API for dashes created by me (@dpgaspar)
+- [#19482](https://github.com/apache/superset/pull/19482) feat: add success toast to alerts and reports (@pkdotson)
+- [#19574](https://github.com/apache/superset/pull/19574) feat: add a `where_in` filter for Jinja2 (@betodealmeida)
+- [#19458](https://github.com/apache/superset/pull/19458) feat(explore): Move timer, row counter and cached pills to chart container (@kgabryje)
+- [#19529](https://github.com/apache/superset/pull/19529) feat(explore): Move chart header to top of the page (@kgabryje)
+- [#19489](https://github.com/apache/superset/pull/19489) feat(CI): clean up Python tests output (@ktmud)
+- [#19308](https://github.com/apache/superset/pull/19308) feat(explore): SQL popover in datasource panel (@kgabryje)
+- [#19325](https://github.com/apache/superset/pull/19325) feat(color): support analogous colors to prevent color conflict (@stephenLYZ)
+- [#19408](https://github.com/apache/superset/pull/19408) feat(dashboard): Implement empty states for empty tabs (@kgabryje)
+- [#19446](https://github.com/apache/superset/pull/19446) feat(explore): Move chart actions into dropdown (@kgabryje)
+- [#19394](https://github.com/apache/superset/pull/19394) feat(explore): UI changes in dataset panel on Explore page (@kgabryje)
+
+**Fixes**
+
+- [#20382](https://github.com/apache/superset/pull/20382) fix: Allow dataset owners to explore their datasets (@reesercollins)
+- [#20419](https://github.com/apache/superset/pull/20419) fix(embedded): Retry when executing alert queries to avoid sending transient errors to users as alert failure notifications (@zhaorui2022)
+- [#20555](https://github.com/apache/superset/pull/20555) fix: Respecting max/min opacities, and adding tests. (@rusackas)
+- [#20571](https://github.com/apache/superset/pull/20571) fix: Revert #20408 (stacking negative values in echarts bar chart) (@rusackas)
+- [#20487](https://github.com/apache/superset/pull/20487) fix(database-modal): form in database model effects results of the database list (@stephenLYZ)
+- [#20488](https://github.com/apache/superset/pull/20488) fix(big-number): big number gets cut off on a Dashboard (@stephenLYZ)
+- [#16326](https://github.com/apache/superset/pull/16326) fix: SQL Lab cancel query in Redshift database connection does not wo… (@yourssvk)
+- [#20362](https://github.com/apache/superset/pull/20362) fix: Unable to download the Dashboard as image in case there's an image added through Markdown (@diegomedina248)
+- [#20543](https://github.com/apache/superset/pull/20543) fix: Removes psycopg2 as a required dependency
+- [#20442](https://github.com/apache/superset/pull/20442) fix(db): Show the only db install guide when the db is already installed and error is existed while importing file. (@prosdev0107)
+- [#20483](https://github.com/apache/superset/pull/20483) fix: bump FAB to 4.1.2 (@dpgaspar)
+- [#20493](https://github.com/apache/superset/pull/20493) fix: correction from mmsql to mssql in setup.py (@mdeshmu)
+- [#20460](https://github.com/apache/superset/pull/20460) fix: new column UUID conflicts in dual write (@eschutho)
+- [#20485](https://github.com/apache/superset/pull/20485) fix: Re-add filter-box time granularity/column (@john-bodley)
+- [#20480](https://github.com/apache/superset/pull/20480) fix(docs): prevent some symbols from being copied in docs (@stephenLYZ)
+- [#19920](https://github.com/apache/superset/pull/19920) fix(table viz): correctly sort by multiple columns in a table (@stevetracvc)
+- [#20402](https://github.com/apache/superset/pull/20402) fix: alert & reports active toggle optimistic update (@diegomedina248)
+- [#20472](https://github.com/apache/superset/pull/20472) fix: Changes the return type of get_permissions to be JSON friendly (@michael-s-molina)
+- [#20468](https://github.com/apache/superset/pull/20468) fix: async queries limit bug (@AAfghahi)
+- [#20257](https://github.com/apache/superset/pull/20257) fix(home): Show home page tabs as pills instead of links (@prosdev0107)
+- [#20340](https://github.com/apache/superset/pull/20340) fix: ensure column name in description is string (@betodealmeida)
+- [#20350](https://github.com/apache/superset/pull/20350) fix(viz): BigQuery time grain 'minute'/'second' throws an error (@diegomedina248)
+- [#20384](https://github.com/apache/superset/pull/20384) fix(chart & table): Prevent the dates from wrapping in table chart (@prosdev0107)
+- [#20404](https://github.com/apache/superset/pull/20404) fix: suppress translation warning in jest (@zhaoyongjie)
+- [#20451](https://github.com/apache/superset/pull/20451) fix: should raise exception when apply a categorical axis (@zhaoyongjie)
+- [#20447](https://github.com/apache/superset/pull/20447) fix: table viz sort icon bottom aligned (@diegomedina248)
+- [#20326](https://github.com/apache/superset/pull/20326) fix(fbprophet): Fix weekly frequencies (@john-bodley)
+- [#20434](https://github.com/apache/superset/pull/20434) fix(20428): Address-Presto/Trino-Poll-Issue-Refactor (@Thelin90)
+- [#20411](https://github.com/apache/superset/pull/20411) fix(dashboard): new created chart did not have high lighted effect when using the permalink of chart share in dashboard (@diegomedina248)
+- [#20261](https://github.com/apache/superset/pull/20261) fix(embedded): CSV download for chart (@lilykuang)
+- [#20276](https://github.com/apache/superset/pull/20276) fix(cosmetic): cannot find m-r-10 class in superset.less (@Renderz)
+- [#20420](https://github.com/apache/superset/pull/20420) fix: rm eslint-plugin-translation-vars engines requirement (@stephenLYZ)
+- [#20409](https://github.com/apache/superset/pull/20409) fix(bar-chart-v2): remove marker control from bar chart V2 (@stephenLYZ)
+- [#20333](https://github.com/apache/superset/pull/20333) fix(presto): use milliseconds timespec for presto (@mohittt8)
+- [#20414](https://github.com/apache/superset/pull/20414) fix: key error on permalink fetch for old permalinks (@eschutho)
+- [#20410](https://github.com/apache/superset/pull/20410) fix: Adding extra metrics issue after chart configuration (@codemaster08240328)
+- [#20405](https://github.com/apache/superset/pull/20405) fix: Incorrect translations in Chinese in messages.po (@chuancyzhang)
+- [#20396](https://github.com/apache/superset/pull/20396) fix(plugin-chart-pivot-table): color weight of Conditional formatting metrics not work (@stephenLYZ)
+- [#20361](https://github.com/apache/superset/pull/20361) fix(fonts): Show the all the A's in our workspace correctly, not funky (@prosdev0107)
+- [#20383](https://github.com/apache/superset/pull/20383) fix: Unable to export multiple Dashboards with the same name (@diegomedina248)
+- [#20363](https://github.com/apache/superset/pull/20363) fix: A newly connected database doesn't appear in the databases list if user connected database using the 'plus' button (@diegomedina248)
+- [#20372](https://github.com/apache/superset/pull/20372) fix: update connection modal to use existing catalog (@pkdotson)
+- [#20368](https://github.com/apache/superset/pull/20368) fix(VERSIONED_EXPORTS): Ensure dashboards and charts adhere to the VERSIONED_EXPORTS feature flag (@john-bodley)
+- [#20351](https://github.com/apache/superset/pull/20351) fix: catch some potential errors on dual write (@eschutho)
+- [#20364](https://github.com/apache/superset/pull/20364) fix: query execution time is not fully displayed in bubble icon (@diegomedina248)
+- [#20365](https://github.com/apache/superset/pull/20365) fix: Fix typo in Error handling message (@codemaster08240328)
+- [#19967](https://github.com/apache/superset/pull/19967) fix: A newly connected database doesn't appear in the databases list if user connected database using the 'plus' button (@diegomedina248)
+- [#20348](https://github.com/apache/superset/pull/20348) fix(docker): Make Gunicorn Keepalive Adjustable (@mdeshmu)
+- [#19670](https://github.com/apache/superset/pull/19670) fix: Add serviceAccountName to celerybeat pods (@paulinjo)
+- [#20315](https://github.com/apache/superset/pull/20315) fix(chart): chart gets cut off on the dashboard (@stephenLYZ)
+- [#20324](https://github.com/apache/superset/pull/20324) fix: superset-ui/core coverage (@zhaoyongjie)
+- [#20282](https://github.com/apache/superset/pull/20282) fix(explore): Make that see more/see less works correctly with scrolling when error msg is long text. (@prosdev0107)
+- [#20296](https://github.com/apache/superset/pull/20296) fix: Alpha are unable to perform a second modification to a Dataset when in Explore (@hughhhh)
+- [#20290](https://github.com/apache/superset/pull/20290) fix: Faulty datetime parser regex (@reesercollins)
+- [#19761](https://github.com/apache/superset/pull/19761) fix(plugin-chart-echarts): [feature-parity] apply button of annotation layer doesn't work as expected (@stephenLYZ)
+- [#20263](https://github.com/apache/superset/pull/20263) fix(embedded): accessing variable response before initialization (@zhaorui2022)
+- [#20274](https://github.com/apache/superset/pull/20274) fix(codecov): improve core code coverage (@stephenLYZ)
+- [#20187](https://github.com/apache/superset/pull/20187) fix: Database import with cancel_query.. extra field (@codemaster08240328)
+- [#20237](https://github.com/apache/superset/pull/20237) fix(cosmetic): Fix Datasource Modal Out Of Box (@Renderz)
+- [#20058](https://github.com/apache/superset/pull/20058) fix: Support the Clipboard API in modern browsers (@diegomedina248)
+- [#20164](https://github.com/apache/superset/pull/20164) fix(sql lab): View result button is not showing consistently (@diegomedina248)
+- [#20171](https://github.com/apache/superset/pull/20171) fix(charts list): do not trigger ListViewError exception for anonymous user (@trepmag)
+- [#20178](https://github.com/apache/superset/pull/20178) fix: While exporting CSV , only the entries on first page are getting downloaded even when user is on other pages #17861 (@LahmerIlyas)
+- [#20204](https://github.com/apache/superset/pull/20204) fix: Fixes issue where results panel height was incorrect [sc-49045] (@eric-briscoe)
+- [#20235](https://github.com/apache/superset/pull/20235) fix: Box Plot Chart throws an error when the average (AVG) / SUM is being calculated on the Metrics (@diegomedina248)
+- [#20088](https://github.com/apache/superset/pull/20088) fix: datatype tracking issue on virtual dataset (@codemaster08240328)
+- [#20220](https://github.com/apache/superset/pull/20220) fix: dashbaord unable to refresh (@zhaoyongjie)
+- [#20228](https://github.com/apache/superset/pull/20228) fix: failed samples should throw exception (@zhaoyongjie)
+- [#20203](https://github.com/apache/superset/pull/20203) fix: move columns to datasource object for bootstrap data (@hughhhh)
+- [#20151](https://github.com/apache/superset/pull/20151) fix(csv): Ensure df_to_escaped_csv does not coerce integer columns to float (@john-bodley)
+- [#20221](https://github.com/apache/superset/pull/20221) fix(legacy-plugin-chart-sunburst): linear color scheme not work when secondary metric is provided (@stephenLYZ)
+- [#20223](https://github.com/apache/superset/pull/20223) fix(legacy-plugin-chart-sunburst): chart broken when secondary metric is removed (@stephenLYZ)
+- [#20147](https://github.com/apache/superset/pull/20147) fix(cosmetic): Limiting modal height (@rusackas)
+- [#20206](https://github.com/apache/superset/pull/20206) fix(sql lab): SQL Lab Compile Query Delay (@diegomedina248)
+- [#20201](https://github.com/apache/superset/pull/20201) fix: unable to set destroyOnClose on ModalTrigger (@zhaoyongjie)
+- [#20186](https://github.com/apache/superset/pull/20186) fix(db): make to allow to show/hide the password when only creating (@prosdev0107)
+- [#20127](https://github.com/apache/superset/pull/20127) fix(database): retrival of tables and views from schema for exasol backend (@Nicoretti)
+- [#19899](https://github.com/apache/superset/pull/19899) fix: always create parameter json field (@pkdotson)
+- [#20173](https://github.com/apache/superset/pull/20173) fix: avoid while cycle in computeMaxFontSize for big Number run forever when css rule applied (@diegomedina248)
+- [#20086](https://github.com/apache/superset/pull/20086) fix(css): transparent linear gradient not working in safari (@stephenLYZ)
+- [#19102](https://github.com/apache/superset/pull/19102) fix: string aggregation is incorrect in PivotTableV2 (@diegomedina248)
+- [#20011](https://github.com/apache/superset/pull/20011) fix(chart & heatmap): make to fix that y label is rendering out of bounds (@prosdev0107)
+- [#20142](https://github.com/apache/superset/pull/20142) fix(explore): handle null control sections (@villebro)
+- [#20128](https://github.com/apache/superset/pull/20128) fix: advanced data type API spec and permission name (@dpgaspar)
+- [#20107](https://github.com/apache/superset/pull/20107) fix(generic-chart-axes): set x-axis if unset and ff is enabled (@villebro)
+- [#20018](https://github.com/apache/superset/pull/20018) fix(modal): add primary button loading state to modals (@kgopal492)
+- [#20099](https://github.com/apache/superset/pull/20099) fix: Add cypress test for report page direct link issue (@codemaster08240328)
+- [#20068](https://github.com/apache/superset/pull/20068) fix: dbmodal test connection error timeout (@pkdotson)
+- [#20092](https://github.com/apache/superset/pull/20092) fix: Revert "feat(explore): Show confirmation modal if user exits Explore without saving changes (#19993) (@kgabryje)
+- [#19939](https://github.com/apache/superset/pull/19939) fix(chart & alert): make to show metrics properly (@prosdev0107)
+- [#20085](https://github.com/apache/superset/pull/20085) fix: typo in `importexport/api.py` OpenAPI (@betodealmeida)
+- [#20051](https://github.com/apache/superset/pull/20051) fix(CRUD): make to fix the dancing when crud view is on hover (@prosdev0107)
+- [#20064](https://github.com/apache/superset/pull/20064) fix(chart & gallery): make to add mixed time-series into recommended charts (@prosdev0107)
+- [#20013](https://github.com/apache/superset/pull/20013) fix: The dynamic form to connect to Snowflake DB is not returning any errors (@diegomedina248)
+- [#20029](https://github.com/apache/superset/pull/20029) fix(plugin-chart-echarts): tooltip of big number truncated at then bottom (@stephenLYZ)
+- [#19914](https://github.com/apache/superset/pull/19914) fix: Refactor SQL engine username logic (@john-bodley)
+- [#20050](https://github.com/apache/superset/pull/20050) fix: Fixes Tabs style (@michael-s-molina)
+- [#20048](https://github.com/apache/superset/pull/20048) fix(homepage): make to show indicator when tab is chosen (@prosdev0107)
+- [#20026](https://github.com/apache/superset/pull/20026) fix(chart & filters): make to padding between textarea and buttons (@prosdev0107)
+- [#20019](https://github.com/apache/superset/pull/20019) fix(embedded): third party cookies (@lilykuang)
+- [#20033](https://github.com/apache/superset/pull/20033) fix: Direct Linking issue on report list: 404 status code. (@codemaster08240328)
+- [#19977](https://github.com/apache/superset/pull/19977) fix(word-cloud): fix randomness of each word's rotation (@ebaratte)
+- [#20021](https://github.com/apache/superset/pull/20021) fix: native filter truncation rerendering loop on hover (@diegomedina248)
+- [#20004](https://github.com/apache/superset/pull/20004) fix: URI form is blank when trying to connect from sql lab (@diegomedina248)
+- [#19841](https://github.com/apache/superset/pull/19841) fix: Table chart column config issue (@codemaster08240328)
+- [#19877](https://github.com/apache/superset/pull/19877) fix: Making chart update more truthful (@Gwitchr)
+- [#19996](https://github.com/apache/superset/pull/19996) fix: Use pull_request_target in Cypress Applitools workflow (@geido)
+- [#19972](https://github.com/apache/superset/pull/19972) fix: revert chore(deps): bump d3-svg-legend in /superset-frontend (#19846) (@villebro)
+- [#19889](https://github.com/apache/superset/pull/19889) fix: Fix auto-reversion of label/title in the Metrics popover (@diegomedina248)
+- [#19903](https://github.com/apache/superset/pull/19903) fix(explore): Explore data table tooltip (@Gwitchr)
+- [#19938](https://github.com/apache/superset/pull/19938) fix(chart & table): make to allow highlight in case of numeric column (@prosdev0107)
+- [#19839](https://github.com/apache/superset/pull/19839) fix(dashboard): allow users to resize the markdown widget easier (@cccs-Dustin)
+- [#19887](https://github.com/apache/superset/pull/19887) fix(hive): Workaround for Python 3.9 s3 transfer issue (@john-bodley)
+- [#19936](https://github.com/apache/superset/pull/19936) fix: OpenAPI docs small fixes (@dpgaspar)
+- [#19932](https://github.com/apache/superset/pull/19932) fix: can not correctly set force in store (@zhaoyongjie)
+- [#19930](https://github.com/apache/superset/pull/19930) fix: memoize primitives (@betodealmeida)
+- [#19926](https://github.com/apache/superset/pull/19926) fix(dataset): DAO update (@betodealmeida)
+- [#19826](https://github.com/apache/superset/pull/19826) fix: Missing `f` prefix on f-strings (@code-review-doctor)
+- [#18988](https://github.com/apache/superset/pull/18988) fix(column-header-tooltip): make that hide the tooltip when the cloum… (@prosdev0107)
+- [#19782](https://github.com/apache/superset/pull/19782) fix: chart import error with virtual dataset (@codemaster08240328)
+- [#19485](https://github.com/apache/superset/pull/19485) fix: Set fixed maxWidth of the cron schedule modal (@codemaster08240328)
+- [#19885](https://github.com/apache/superset/pull/19885) fix: Chart download as image issue (@codemaster08240328)
+- [#19883](https://github.com/apache/superset/pull/19883) fix(allow-db-explore): make to check the allow virtual table explore option by default (@prosdev0107)
+- [#19835](https://github.com/apache/superset/pull/19835) fix(helm): fix postgresql values (@benjamin-texier)
+- [#19758](https://github.com/apache/superset/pull/19758) fix(plugin-chart-echarts): [feature parity] annotation line chart color does not work (@stephenLYZ)
+- [#19879](https://github.com/apache/superset/pull/19879) fix(plugin-chart-handlebars): fix overflow, debounce and control reset (@villebro)
+- [#19668](https://github.com/apache/superset/pull/19668) fix: Dates alignment in Table viz (@geido)
+- [#19876](https://github.com/apache/superset/pull/19876) fix: Cannot re-order metrics by drag and drop (@diegomedina248)
+- [#19840](https://github.com/apache/superset/pull/19840) fix(dashboard-css): make to load saved css template (@prosdev0107)
+- [#19859](https://github.com/apache/superset/pull/19859) fix: Dashboard report creation error handling (@etr2460)
+- [#19857](https://github.com/apache/superset/pull/19857) fix: Update eslint error message to reflect location of antd components (@etr2460)
+- [#19605](https://github.com/apache/superset/pull/19605) fix: Query execution time is displayed as invalid date (@diegomedina248)
+- [#19694](https://github.com/apache/superset/pull/19694) fix(db & connection): make to show/hide the password when only creating db connection (@prosdev0107)
+- [#19778](https://github.com/apache/superset/pull/19778) fix: deck.gl GeoJsonLayer Autozoom & fill/stroke options (@diegomedina248)
+- [#19850](https://github.com/apache/superset/pull/19850) fix: Regression on Data and Alerts & Reports Headers (@diegomedina248)
+- [#19842](https://github.com/apache/superset/pull/19842) fix: count(distinct column_name) in metrics (@zhaoyongjie)
+- [#19843](https://github.com/apache/superset/pull/19843) fix(explore): ignore temporary controls in altered pill (@villebro)
+- [#19800](https://github.com/apache/superset/pull/19800) fix: Cypress tests reliability improvements (@diegomedina248)
+- [#19575](https://github.com/apache/superset/pull/19575) fix: Show full long number in text email report for table chart. (@codemaster08240328)
+- [#19429](https://github.com/apache/superset/pull/19429) fix(dashboard): make to filter the correct certified or non-certified… (@prosdev0107)
+- [#13082](https://github.com/apache/superset/pull/13082) fix(sql_lab): Add custom timestamp type for literal casting for presto timestamps (@kekwan)
+- [#19797](https://github.com/apache/superset/pull/19797) fix: add missing init files (@suddjian)
+- [#19672](https://github.com/apache/superset/pull/19672) fix: trap SQLAlchemy common exceptions & throw 422 error instead (@diegomedina248)
+- [#19288](https://github.com/apache/superset/pull/19288) fix: AlertReportCronScheduler tests (@diegomedina248)
+- [#19781](https://github.com/apache/superset/pull/19781) fix(world-map): remove categorical color control (@serenajiang)
+- [#19792](https://github.com/apache/superset/pull/19792) fix(plugin-chart-table): Resetting controls when switching query mode (@kgabryje)
+- [#19755](https://github.com/apache/superset/pull/19755) fix: small cleanup for created by me dashboards API (@dpgaspar)
+- [#19784](https://github.com/apache/superset/pull/19784) fix(readme): Remove broken link to legacy gallery (@drluckyspin)
+- [#19722](https://github.com/apache/superset/pull/19722) fix: dashboard top level tabs edit (@diegomedina248)
+- [#19777](https://github.com/apache/superset/pull/19777) fix(explore): Double divider if no permissions for adding reports (@kgabryje)
+- [#19673](https://github.com/apache/superset/pull/19673) fix(import): Add the error alert on failed database import (@prosdev0107)
+- [#19518](https://github.com/apache/superset/pull/19518) fix: alert/report created by filter inconsistency with table display (@diegomedina248)
+- [#19700](https://github.com/apache/superset/pull/19700) fix: remove expose (@AAfghahi)
+- [#19626](https://github.com/apache/superset/pull/19626) fix: deactivate embedding on a dashboard (@suddjian)
+- [#19472](https://github.com/apache/superset/pull/19472) fix: Dashboard Edit View Tab Headers Hidden when Dashboard Name is Long (@diegomedina248)
+- [#19311](https://github.com/apache/superset/pull/19311) fix(sql lab): add quotes when autocompleting table names with spaces in the editor (@diegomedina248)
+- [#19290](https://github.com/apache/superset/pull/19290) fix(sql lab): select edit on query from history doesn't upload editor properly (@diegomedina248)
+- [#19420](https://github.com/apache/superset/pull/19420) fix: sql lab ctrl t behaved differently from clicking (@Gwitchr)
+- [#19357](https://github.com/apache/superset/pull/19357) fix: Redirect to full url on 401 (@geido)
+- [#19001](https://github.com/apache/superset/pull/19001) fix: Line Chart Annotation Info Update (@codemaster08240328)
+- [#19714](https://github.com/apache/superset/pull/19714) fix: create virtual table with exotic type (@villebro)
+- [#19708](https://github.com/apache/superset/pull/19708) fix(nav): infinite redirect and upload dataset nav permissions (@ktmud)
+- [#19430](https://github.com/apache/superset/pull/19430) fix(data-upload): make to change err message (@prosdev0107)
+- [#19419](https://github.com/apache/superset/pull/19419) fix(alert & report): make to fix the issue when recreate report (@prosdev0107)
+- [#19371](https://github.com/apache/superset/pull/19371) fix: Reset sorting bar issue in Barchart (@codemaster08240328)
+- [#19362](https://github.com/apache/superset/pull/19362) fix(sql lab): display the 'View Results' button consistently in the history tab on sync mode (@diegomedina248)
+- [#19294](https://github.com/apache/superset/pull/19294) fix: improve alerts & reports modal on small devices (@diegomedina248)
+- [#19257](https://github.com/apache/superset/pull/19257) fix(sql lab): table selector should display all the selected tables (@diegomedina248)
+- [#19686](https://github.com/apache/superset/pull/19686) fix(plugin-chart-echarts): xAxis scale is not correct when time grain is quarter (@stephenLYZ)
+- [#19646](https://github.com/apache/superset/pull/19646) fix(explore): Change copy of cross filters checkbox (@kgabryje)
+- [#19586](https://github.com/apache/superset/pull/19586) fix: Navbar styles and Welcome page text (@geido)
+- [#19662](https://github.com/apache/superset/pull/19662) fix(database-api): allow search for all columns (@villebro)
+- [#19656](https://github.com/apache/superset/pull/19656) fix: allow_browser_login in import/export API (@betodealmeida)
+- [#19628](https://github.com/apache/superset/pull/19628) fix: Table Autosizing Has Unnecessary Horizontal Scroll Bars (@diegomedina248)
+- [#19573](https://github.com/apache/superset/pull/19573) fix(chart & polygon): make to fix the issue the polygon chart (@prosdev0107)
+- [#19051](https://github.com/apache/superset/pull/19051) fix: update Permissions for right nav (@AAfghahi)
+- [#19625](https://github.com/apache/superset/pull/19625) fix(test): make test_clean_requests_after_schema_grant more idempotent (@ktmud)
+- [#19571](https://github.com/apache/superset/pull/19571) fix: Catch literal colors when theme top level (@geido)
+- [#19594](https://github.com/apache/superset/pull/19594) fix: spelling of following (@lzm0)
+- [#19569](https://github.com/apache/superset/pull/19569) fix: check type of url before performing string actions (@eschutho)
+- [#19570](https://github.com/apache/superset/pull/19570) fix: sqloxide optional (@betodealmeida)
+- [#19397](https://github.com/apache/superset/pull/19397) fix: weight tooltip issue (@codemaster08240328)
+- [#19313](https://github.com/apache/superset/pull/19313) fix(sql lab): increase the size of the action icons in the history tab (@diegomedina248)
+- [#19039](https://github.com/apache/superset/pull/19039) fix(explore): clean data when hidding control (@stephenLYZ)
+- [#19444](https://github.com/apache/superset/pull/19444) fix: Error Message is cut off in alerts & reports log page (@codemaster08240328)
+- [#19312](https://github.com/apache/superset/pull/19312) fix: adaptive formatting typo in explore dropdowns (@diegomedina248)
+- [#19534](https://github.com/apache/superset/pull/19534) fix(explore): Chart header icon paddings (@kgabryje)
+- [#19399](https://github.com/apache/superset/pull/19399) fix: native filter dropdown not attached to parent node (@diegomedina248)
+- [#19112](https://github.com/apache/superset/pull/19112) fix: Dashboard import holding issue (@codemaster08240328)
+- [#19342](https://github.com/apache/superset/pull/19342) fix: Clean up custom css when dashboard unmounted (@codemaster08240328)
+- [#19491](https://github.com/apache/superset/pull/19491) fix: Dynamic form to connect to Snowflake DB is not displaying authentication errors (@diegomedina248)
+- [#19528](https://github.com/apache/superset/pull/19528) fix: Correct Ukraine map (@wacken89)
+- [#19522](https://github.com/apache/superset/pull/19522) fix: add back view for report reload error (@pkdotson)
+- [#19519](https://github.com/apache/superset/pull/19519) fix: GSheets rendering from global nav (@hughhhh)
+- [#19358](https://github.com/apache/superset/pull/19358) fix(sqllab): make to hide the delete button of most recent query history (@prosdev0107)
+- [#19307](https://github.com/apache/superset/pull/19307) fix: Logo resizing on page load (@geido)
+- [#19166](https://github.com/apache/superset/pull/19166) fix: time filter should be [start, end) (@zhaoyongjie)
+
+**Others**
+
+- [#20620](https://github.com/apache/superset/pull/20620) docs: fix link for Apache Superset source code (@dpgaspar)
+- [#20621](https://github.com/apache/superset/pull/20621) chore: bump FAB to 4.1.3 (@dpgaspar)
+- [#20486](https://github.com/apache/superset/pull/20486) chore: Updated copy in chart drop down to "View as table" (@lauderbaugh)
+- [#20116](https://github.com/apache/superset/pull/20116) style(typo): occured -> occurred (@sfirke)
+- [#20401](https://github.com/apache/superset/pull/20401) chore: add action to welcome new users (@eschutho)
+- [#20269](https://github.com/apache/superset/pull/20269) chore(docs): Remove cache warming documentation (@ajwhite)
+- [#20194](https://github.com/apache/superset/pull/20194) chore: Removes unused vars (@michael-s-molina)
+- [#20321](https://github.com/apache/superset/pull/20321) chore: add breaking change information about form_data datasource_type (@eschutho)
+- [#20298](https://github.com/apache/superset/pull/20298) chore: Removes no-use-before-define warnings (@michael-s-molina)
+- [#20337](https://github.com/apache/superset/pull/20337) chore(dashboard): update Edit Dashboard side panel tabs (@codyml)
+- [#20318](https://github.com/apache/superset/pull/20318) chore: Updates the final steps of the release README (@michael-s-molina)
+- [#20307](https://github.com/apache/superset/pull/20307) docs: Updates CHANGELOG.md with 1.5.1 fixes (@michael-s-molina)
+- [#20308](https://github.com/apache/superset/pull/20308) docs(jinja): Detail how to use Jinja parameters (@EBoisseauSierra)
+- [#20304](https://github.com/apache/superset/pull/20304) chore: superset-ui/core code coverage (@zhaoyongjie)
+- [#20297](https://github.com/apache/superset/pull/20297) chore(deps): pinning pyjwt to 2.4.0 (@sadpandajoe)
+- [#20287](https://github.com/apache/superset/pull/20287) chore(deps): bump numpy 1.22.1 and PyJWT to 2.4.0 (@sadpandajoe)
+- [#20272](https://github.com/apache/superset/pull/20272) chore: remove unused codes for samples (@zhaoyongjie)
+- [#20289](https://github.com/apache/superset/pull/20289) chore: Adjusts release emails (@michael-s-molina)
+- [#20180](https://github.com/apache/superset/pull/20180) docs: facelift the docs (@mistercrunch)
+- [#20249](https://github.com/apache/superset/pull/20249) chore: add event logger to reports/alerts CRUD (@AAfghahi)
+- [#20273](https://github.com/apache/superset/pull/20273) chore: adjust the psycopg2 version of k8s installation guide (@ensky)
+- [#20152](https://github.com/apache/superset/pull/20152) refactor(trino): Handful of updates for the Trino engine (@john-bodley)
+- [#20252](https://github.com/apache/superset/pull/20252) chore: use exc_info to pass errors to log warnings (@eschutho)
+- [#20154](https://github.com/apache/superset/pull/20154) chore(requirements): Cleanup of Python requirements (@john-bodley)
+- [#20226](https://github.com/apache/superset/pull/20226) refactor: decouple DataTableControl (@zhaoyongjie)
+- [#20243](https://github.com/apache/superset/pull/20243) docs: Add beans to users list (@kakoni)
+- [#20231](https://github.com/apache/superset/pull/20231) docs: Updates release scripts and docs (@michael-s-molina)
+- [#20196](https://github.com/apache/superset/pull/20196) chore: bumping min version of shillelagh (@AAfghahi)
+- [#20192](https://github.com/apache/superset/pull/20192) chore: Moves date utils to utils folder (@michael-s-molina)
+- [#20210](https://github.com/apache/superset/pull/20210) docs: update release instructions (@villebro)
+- [#20205](https://github.com/apache/superset/pull/20205) chore(deps): bump swagger-ui-react from 4.1.2 to 4.1.3 in /docs (@dependabot[bot])
+- [#20195](https://github.com/apache/superset/pull/20195) docs: correct case of ClickHouse (@DanRoscigno)
+- [#20109](https://github.com/apache/superset/pull/20109) refactor: decouple DataTablesPane (@zhaoyongjie)
+- [#20193](https://github.com/apache/superset/pull/20193) refactor: Removes embedded/index.tsx warnings (@michael-s-molina)
+- [#20185](https://github.com/apache/superset/pull/20185) docs(security): a typo: Gamma should be in quotes (@jimmytheneutrino)
+- [#20146](https://github.com/apache/superset/pull/20146) chore: Implement global header in Dashboard (@geido)
+- [#20174](https://github.com/apache/superset/pull/20174) chore: Disable flaky assert in reports cypress test (@kgabryje)
+- [#20163](https://github.com/apache/superset/pull/20163) chore: change button name in Sql Lab (@AAfghahi)
+- [#20157](https://github.com/apache/superset/pull/20157) chore: filter undefined operators (@zhaoyongjie)
+- [#20140](https://github.com/apache/superset/pull/20140) chore(data-table): make formatted dttm the default (@villebro)
+- [#20104](https://github.com/apache/superset/pull/20104) chore: fix INTHEWILD sort order and indentation (@villebro)
+- [#20093](https://github.com/apache/superset/pull/20093) chore: Add the tnum font property to Table components (@geido)
+- [#20103](https://github.com/apache/superset/pull/20103) docs: Update INTHEWILD.md (@fccoelho)
+- [#20102](https://github.com/apache/superset/pull/20102) chore: Update aiohttp to 3.8.1 (@diegomedina248)
+- [#20066](https://github.com/apache/superset/pull/20066) chore: Set limit for a query in execute_sql_statement (@AAfghahi)
+- [#20032](https://github.com/apache/superset/pull/20032) chore: Change copy to Edit chart in Dashboard dropdown (@geido)
+- [#20071](https://github.com/apache/superset/pull/20071) chore: Fix and enhance Applitools workflows (@geido)
+- [#19966](https://github.com/apache/superset/pull/19966) test: make tabbed dashboard a little more complex (@ktmud)
+- [#19976](https://github.com/apache/superset/pull/19976) perf(plugin-chart-table): Add memoization to avoid rerenders (@kgabryje)
+- [#20044](https://github.com/apache/superset/pull/20044) chore: Create a generic header component for Explore and Dashboard (@kgabryje)
+- [#20046](https://github.com/apache/superset/pull/20046) docs: add changelog and updating entries for 1.5.0 (@villebro)
+- [#19962](https://github.com/apache/superset/pull/19962) chore: add doc link for db migration conflict warning (@ktmud)
+- [#20034](https://github.com/apache/superset/pull/20034) chore: Changes the no-literal-colors lint rule to throw errors instead of warnings (@michael-s-molina)
+- [#20031](https://github.com/apache/superset/pull/20031) chore: Run Applitools + Cypress nightly (@geido)
+- [#20006](https://github.com/apache/superset/pull/20006) chore: Removes hard-coded colors from the plugins - iteration 2 (@michael-s-molina)
+- [#19130](https://github.com/apache/superset/pull/19130) refactor: Refactor reports for Charts and Dashboards (@AAfghahi)
+- [#20016](https://github.com/apache/superset/pull/20016) chore: Removes hard-coded colors - iteration 3 (@michael-s-molina)
+- [#19870](https://github.com/apache/superset/pull/19870) docs: Detail front-end development instructions (@EBoisseauSierra)
+- [#19971](https://github.com/apache/superset/pull/19971) docs: Add config for running on a WSGI HTTP server (@thinhnd2104)
+- [#20008](https://github.com/apache/superset/pull/20008) chore: Upgrades Storybook from 6.4.19 to 6.4.22 (@michael-s-molina)
+- [#20009](https://github.com/apache/superset/pull/20009) docs: typo in chart-params markdown file (@JakobMiksch)
+- [#19923](https://github.com/apache/superset/pull/19923) chore: Removes hard-coded colors from the plugins - iteration 1 (@michael-s-molina)
+- [#19954](https://github.com/apache/superset/pull/19954) chore: convert URLShortLinkButton to typescript (@ktmud)
+- [#19929](https://github.com/apache/superset/pull/19929) chore: change subject name from no_name to named for PNGs in (@AAfghahi)
+- [#19942](https://github.com/apache/superset/pull/19942) refactor(ReportModal): simplify state reducer and improve error handling (@ktmud)
+- [#19770](https://github.com/apache/superset/pull/19770) chore: remove druid datasource from the config (@eschutho)
+- [#19911](https://github.com/apache/superset/pull/19911) chore: Fix broken link for DouroECI (@mavimo)
+- [#19951](https://github.com/apache/superset/pull/19951) chore: Adds the theme object to chart properties (@michael-s-molina)
+- [#19813](https://github.com/apache/superset/pull/19813) chore: get embedded user with roles and permissions (@suddjian)
+- [#19897](https://github.com/apache/superset/pull/19897) chore: Adds a storybook to FilterableTable (@michael-s-molina)
+- [#19924](https://github.com/apache/superset/pull/19924) chore(reports): Improving logging around failed scheduled reports (@craig-rueda)
+- [#19906](https://github.com/apache/superset/pull/19906) revert: "fix(sql lab): display the 'View Results' button consistently in the history tab on sync mode" (@Gwitchr)
+- [#19916](https://github.com/apache/superset/pull/19916) chore(deps): bump react-virtualized-auto-sizer from 1.0.2 to 1.0.6 in /superset-frontend (@dependabot[bot])
+- [#19888](https://github.com/apache/superset/pull/19888) chore(deps): bump cross-fetch from 3.1.4 to 3.1.5 in /docs (@dependabot[bot])
+- [#19894](https://github.com/apache/superset/pull/19894) chore(deps-dev): bump eslint-plugin-prettier from 3.3.1 to 4.0.0 in /superset-frontend (@dependabot[bot])
+- [#19602](https://github.com/apache/superset/pull/19602) docs: Added gtag to docusaurus (@AAfghahi)
+- [#19878](https://github.com/apache/superset/pull/19878) chore(deps-dev): bump @storybook/client-api from 6.4.19 to 6.4.22 in /superset-frontend (@dependabot[bot])
+- [#19821](https://github.com/apache/superset/pull/19821) test(native filter): refactor and add new test (@jinghua-qa)
+- [#19613](https://github.com/apache/superset/pull/19613) chore: Update line-height in SliceHeaderControl (@geido)
+- [#19616](https://github.com/apache/superset/pull/19616) chore: Update font-sizes in DatabaseModal (@geido)
+- [#19866](https://github.com/apache/superset/pull/19866) chore: fix explore pills (@villebro)
+- [#19872](https://github.com/apache/superset/pull/19872) chore: Update aiohttp>=3.7.4 in requirements (@hughhhh)
+- [#19874](https://github.com/apache/superset/pull/19874) chore: bump rockset>=0.8.10, <0.9 (@hughhhh)
+- [#19864](https://github.com/apache/superset/pull/19864) chore(deps): bump react-syntax-highlighter from 15.4.5 to 15.5.0 in /superset-frontend (@dependabot[bot])
+- [#19828](https://github.com/apache/superset/pull/19828) chore: add custom eslint plugin to prevent translation variables (@stephenLYZ)
+- [#19845](https://github.com/apache/superset/pull/19845) chore(deps): bump react-split from 2.0.9 to 2.0.14 in /superset-frontend (@dependabot[bot])
+- [#19846](https://github.com/apache/superset/pull/19846) chore(deps): bump d3-svg-legend from 1.13.0 to 2.25.6 in /superset-frontend (@dependabot[bot])
+- [#19847](https://github.com/apache/superset/pull/19847) chore(deps-dev): bump eslint-plugin-jsx-a11y from 6.4.1 to 6.5.1 in /superset-frontend (@dependabot[bot])
+- [#19853](https://github.com/apache/superset/pull/19853) chore(frontend-tests): Spelling (@jsoref)
+- [#19823](https://github.com/apache/superset/pull/19823) docs: updated links for country map scripts (@ktmud)
+- [#19829](https://github.com/apache/superset/pull/19829) chore(deps-dev): bump babel-loader from 8.2.4 to 8.2.5 in /superset-frontend (@dependabot[bot])
+- [#19830](https://github.com/apache/superset/pull/19830) chore(deps): bump react-hot-loader from 4.12.20 to 4.13.0 in /superset-frontend (@dependabot[bot])
+- [#19403](https://github.com/apache/superset/pull/19403) chore(deps-dev): bump babel-loader from 8.2.2 to 8.2.4 in /superset-frontend (@dependabot[bot])
+- [#19637](https://github.com/apache/superset/pull/19637) chore(deps): bump moment from 2.29.1 to 2.29.2 in /superset-frontend (@dependabot[bot])
+- [#19681](https://github.com/apache/superset/pull/19681) chore(deps): bump async from 3.2.0 to 3.2.3 in /superset-frontend/cypress-base (@dependabot[bot])
+- [#19680](https://github.com/apache/superset/pull/19680) chore(deps): bump async from 3.2.0 to 3.2.3 in /superset-websocket (@dependabot[bot])
+- [#19020](https://github.com/apache/superset/pull/19020) chore(deps): bump url-parse from 1.5.7 to 1.5.10 in /superset-frontend (@dependabot[bot])
+- [#17978](https://github.com/apache/superset/pull/17978) chore(deps): bump @types/d3-time from 1.1.1 to 3.0.0 in /superset-frontend (@dependabot[bot])
+- [#19727](https://github.com/apache/superset/pull/19727) chore(deps): bump async from 2.6.3 to 2.6.4 in /docs (@dependabot[bot])
+- [#19551](https://github.com/apache/superset/pull/19551) chore(deps): bump minimist from 1.2.5 to 1.2.6 in /superset-websocket (@dependabot[bot])
+- [#19165](https://github.com/apache/superset/pull/19165) chore: simplify error messaging in database modal (@pkdotson)
+- [#19790](https://github.com/apache/superset/pull/19790) chore: bump postgres from 10 to 14 (@dpgaspar)
+- [#19480](https://github.com/apache/superset/pull/19480) chore: Update UPDATING.md (@john-bodley)
+- [#19740](https://github.com/apache/superset/pull/19740) chore: fix grammar error (@zhaoyongjie)
+- [#19703](https://github.com/apache/superset/pull/19703) chore(build): upgrade less-loader (@ktmud)
+- [#19736](https://github.com/apache/superset/pull/19736) chore: Updates the Select code owners (@michael-s-molina)
+- [#19715](https://github.com/apache/superset/pull/19715) docs(install): ubuntu default-libmysqlclient-dev (@cemremengu)
+- [#19726](https://github.com/apache/superset/pull/19726) chore: bumping shillelagh (@AAfghahi)
+- [#19699](https://github.com/apache/superset/pull/19699) chore: fix typo (@betodealmeida)
+- [#19674](https://github.com/apache/superset/pull/19674) chore: upgrade Pillow (@betodealmeida)
+- [#19647](https://github.com/apache/superset/pull/19647) chore(explore): Change labels "Group by"/"Series" to "Dimensions" (@kgabryje)
+- [#19679](https://github.com/apache/superset/pull/19679) chore(deps): bump urijs from 1.19.8 to 1.19.11 in /superset-frontend (@dependabot[bot])
+- [#19638](https://github.com/apache/superset/pull/19638) chore(deps): bump moment from 2.29.1 to 2.29.2 in /docs (@dependabot[bot])
+- [#19617](https://github.com/apache/superset/pull/19617) chore: updated two github issue templates (@srinify)
+- [#19666](https://github.com/apache/superset/pull/19666) chore: Remove TwoTone icons (@geido)
+- [#19614](https://github.com/apache/superset/pull/19614) chore: Remove wrong usage of font-size in ExploreViewContainer (@geido)
+- [#19593](https://github.com/apache/superset/pull/19593) chore: Update font-sizes in ReportModal (@geido)
+- [#19611](https://github.com/apache/superset/pull/19611) chore: Update font-sizes in ImportModal (@geido)
+- [#19615](https://github.com/apache/superset/pull/19615) chore: Update font-sizes in AlertReportModal (@geido)
+- [#19620](https://github.com/apache/superset/pull/19620) chore: Update font-sizes in QueryPreviewModal (@geido)
+- [#19641](https://github.com/apache/superset/pull/19641) chore: clean up dynamic translation strings (@villebro)
+- [#19635](https://github.com/apache/superset/pull/19635) refactor: consistent migration tests organization (@ktmud)
+- [#19634](https://github.com/apache/superset/pull/19634) test: freeze time for dashboard export test (@ktmud)
+- [#19606](https://github.com/apache/superset/pull/19606) test(jinja): refactor to functional tests (@villebro)
+- [#19587](https://github.com/apache/superset/pull/19587) chore: cleanup as unknown conversion (@zhaoyongjie)
+- [#19562](https://github.com/apache/superset/pull/19562) refactor: Removes the CSS files from the Horizon plugin (@michael-s-molina)
+- [#19563](https://github.com/apache/superset/pull/19563) refactor: Removes the CSS files from the Paired T-Test plugin (@michael-s-molina)
+- [#19539](https://github.com/apache/superset/pull/19539) refactor: Removes the CSS files from the Parallel Coordinates plugin (@michael-s-molina)
+- [#19521](https://github.com/apache/superset/pull/19521) refactor: Removes the CSS files from the Partition plugin (@michael-s-molina)
+- [#19493](https://github.com/apache/superset/pull/19493) chore: Removes hard-coded colors from legacy-plugin-chart-sankey (@michael-s-molina)
+- [#19462](https://github.com/apache/superset/pull/19462) chore: Remove FilterBox.less (@geido)
+- [#19438](https://github.com/apache/superset/pull/19438) chore: Remove crud.less from Datasource (@geido)
+- [#19517](https://github.com/apache/superset/pull/19517) chore: Enhance ReactChord style with theme vars (@geido)
+- [#19463](https://github.com/apache/superset/pull/19463) chore: Remove TimeTable.less (@geido)
+- [#19550](https://github.com/apache/superset/pull/19550) chore(deps): bump minimist from 1.2.5 to 1.2.6 in /superset-embedded-sdk (@dependabot[bot])
+- [#19566](https://github.com/apache/superset/pull/19566) chore(deps): bump node-forge from 1.2.1 to 1.3.1 in /docs (@dependabot[bot])
+- [#19552](https://github.com/apache/superset/pull/19552) chore(deps): bump minimist from 1.2.5 to 1.2.6 in /docs (@dependabot[bot])
+- [#19549](https://github.com/apache/superset/pull/19549) chore(deps): bump minimist from 1.2.5 to 1.2.6 in /superset-frontend/cypress-base (@dependabot[bot])
+- [#19559](https://github.com/apache/superset/pull/19559) docs: update the typo in the documentation (@fatosmorina)
+- [#19538](https://github.com/apache/superset/pull/19538) refactor: Removes the CSS files from the Country Map plugin (@michael-s-molina)
+- [#19536](https://github.com/apache/superset/pull/19536) chore: Removes hard-coded opacity and spacing from the BigNumber plugin (@michael-s-molina)
+- [#19494](https://github.com/apache/superset/pull/19494) refactor: Removes the CSS files from the Sankey Loop plugin (@michael-s-molina)
+- [#19492](https://github.com/apache/superset/pull/19492) chore: Remove Legacy Force Directed viz plugin (@geido)
+- [#19524](https://github.com/apache/superset/pull/19524) chore: Deprecating /my_queries endpoint (@AAfghahi)
+- [#19467](https://github.com/apache/superset/pull/19467) chore(Explore): Change text when saving a chart in a new dashboard (@geido)
+- [#19526](https://github.com/apache/superset/pull/19526) chore(database): Creating helper make_url_safe to wrap potential errors (@craig-rueda)
+- [#19415](https://github.com/apache/superset/pull/19415) chore: Remove Control.less in Explore (@geido)
+- [#19413](https://github.com/apache/superset/pull/19413) chore: Remove unused less file from profile (@geido)
+- [#19460](https://github.com/apache/superset/pull/19460) chore: Switch to gender neutral terms (@inclusive-coding-bot)
+- [#19486](https://github.com/apache/superset/pull/19486) refactor: Removes the CSS files from the Treemap plugin (@michael-s-molina)
+- [#19488](https://github.com/apache/superset/pull/19488) refactor: Removes the CSS files from the Sunburst plugin (@michael-s-molina)
+- [#19490](https://github.com/apache/superset/pull/19490) chore: Add theme color to ParallelCoordinates (@geido)
+- [#19442](https://github.com/apache/superset/pull/19442) chore: Remove FilterbaleTableStyles.less (@geido)
+- [#19441](https://github.com/apache/superset/pull/19441) chore: Remove StyledQueryButton.less (@geido)
+- [#19473](https://github.com/apache/superset/pull/19473) refactor: Removes the CSS files from the Rose plugin (@michael-s-molina)
+- [#19466](https://github.com/apache/superset/pull/19466) chore: Removes hard-coded colors from legacy-plugin-chart-world-map (@michael-s-molina)
+- [#19465](https://github.com/apache/superset/pull/19465) refactor: Removes the CSS files from the DeckGL plugin (@michael-s-molina)
+- [#19440](https://github.com/apache/superset/pull/19440) chore: Remove index.less from showSavedQuery (@geido)
+- [#19230](https://github.com/apache/superset/pull/19230) chore!: remove `ROW_LEVEL_SECURITY` feature flag (permanently enable) (@suddjian)
+- [#19361](https://github.com/apache/superset/pull/19361) chore: remove deprecated config keys and endpoints code 2.0 (@pkdotson)
+- [#19261](https://github.com/apache/superset/pull/19261) chore: remove old alerts and configs keys (@pkdotson)
+- [#19168](https://github.com/apache/superset/pull/19168) chore: bump celery and Flask (@dpgaspar)
+- [#19049](https://github.com/apache/superset/pull/19049) chore: Remove logo forced width (@geido)
+- [#19274](https://github.com/apache/superset/pull/19274) chore: remove PUBLIC_ROLE_LIKE_GAMMA deprecated config key (@dpgaspar)
+- [#19273](https://github.com/apache/superset/pull/19273) chore: remove deprecated celery cli (@dpgaspar)
+- [#19262](https://github.com/apache/superset/pull/19262) chore: update updating with druid no sql deprecation (@eschutho)
+- [#19083](https://github.com/apache/superset/pull/19083) chore!: update mutator to take kwargs (@eschutho)
+- [#19231](https://github.com/apache/superset/pull/19231) chore!: remove `ENABLE_REACT_CRUD_VIEWS` feature flag (permanently enable) (@suddjian)
+- [#19241](https://github.com/apache/superset/pull/19241) chore(superset 2.0): remove front-end deprecated code (@graceguo-supercat)
+- [#19107](https://github.com/apache/superset/pull/19107) chore: turn on SQLLAB_BACKEND_PERSISTENCE by default (@ktmud)
+- [#19142](https://github.com/apache/superset/pull/19142) chore!: turn on Versioned Export in config.py (@AAfghahi)
+- [#19108](https://github.com/apache/superset/pull/19108) chore: Update UPDATING.md with info about flipping dnd feature flag (@kgabryje)
+- [#19146](https://github.com/apache/superset/pull/19146) chore!: Remove remove SQLALCHEMY_DOCS_URL and SQLALCHEMY_DISPLAY_TEXT from the config from the config (@hughhhh)
+- [#19017](https://github.com/apache/superset/pull/19017) chore: Deprecate Python 3.7 (@john-bodley)
+- [#19113](https://github.com/apache/superset/pull/19113) chore(config): Migrating `ENABLE_JAVASCRIPT_CONTROLS` from app config to a feature flag (@rusackas)
+- [#19046](https://github.com/apache/superset/pull/19046) chore(explore): Set Drag&Drop feature flags to True by default (@kgabryje)
+- [#19016](https://github.com/apache/superset/pull/19016) chore: Adding PR to Updating.md (@AAfghahi)
+- [#18970](https://github.com/apache/superset/pull/18970) chore: Change Dataset legacy editor flag to true (@AAfghahi)
+
+### 1.5.3 (Thu Jan 5 15:05:44 2023 -0500)
+
+**Database Migrations**
+
+**Features**
+
+**Fixes**
+
+- [#21895](https://github.com/apache/superset/pull/21895) fix: Improves SafeMarkdown HTML sanitization (@michael-s-molina)
+- [#21874](https://github.com/apache/superset/pull/21874) fix: Adds a Content Security Policy (CSP) check for production environments (@michael-s-molina)
+- [#21853](https://github.com/apache/superset/pull/21853) fix: Disables HTML rendering in Toast by default (@michael-s-molina)
+- [#22591](https://github.com/apache/superset/pull/22591) fix: Talisman configuration (@michael-s-molina)
+- [#22196](https://github.com/apache/superset/pull/22196) fix(reports): force data generation in csv reports (@mayurnewase)
+- [#22038](https://github.com/apache/superset/pull/22038) fix: datasource save, improve data validation (@dpgaspar)
+- [#22022](https://github.com/apache/superset/pull/22022) fix: deprecate approve and request_access endpoint (@dpgaspar)
+- [#21964](https://github.com/apache/superset/pull/21964) fix: dashboard api cache decorator (@dpgaspar)
+- [#21875](https://github.com/apache/superset/pull/21875) fix: check that imports are ZIPs (@betodealmeida)
+- [#21761](https://github.com/apache/superset/pull/21761) fix: flash message on database data upload forms (@dpgaspar)
+- [#21759](https://github.com/apache/superset/pull/21759) fix: database schema selector on import data (@dpgaspar)
+- [#21729](https://github.com/apache/superset/pull/21729) fix: allow adhoc columns in non-aggregate query (@mayurnewase)
+- [#21216](https://github.com/apache/superset/pull/21216) fix(database-list): hide upload file button if no permission (@stephenLYZ)
+
+**Others**
+
+- [#21811](https://github.com/apache/superset/pull/21811) chore(sqla): refactor query utils (@villebro)
+
+### 1.5.2 (Wed Sep 14 17:11:51 2022 +0530)
+
+**Fixes**
+
+- [#21461](https://github.com/apache/superset/pull/21461) fix: dashboard filter value is cleared when 2 similar dashboards opened in succession (@mayurnewase)
+- [#21419](https://github.com/apache/superset/pull/21419) fix: cached common bootstrap Revert (#21018) (@dpgaspar)
+- [#21302](https://github.com/apache/superset/pull/21302) fix: disallow users from viewing other user's profile on config (@dpgaspar)
+- [#21272](https://github.com/apache/superset/pull/21272) fix: adds TLS certificate validation option for SMTP (@dpgaspar)
+- [#21076](https://github.com/apache/superset/pull/21076) fix(celery cache warmup): add auth and use warm_up_cache endpoint (@nytai)
+- [#20178](https://github.com/apache/superset/pull/20178) fix: While exporting CSV , only the entries on first page are getting downloaded even when user is on other pages #17861 (@LahmerIlyas)
+- [#20058](https://github.com/apache/superset/pull/20058) fix: Support the Clipboard API in modern browsers (@diegomedina248)
+- [#20434](https://github.com/apache/superset/pull/20434) fix(20428): Address-Presto/Trino-Poll-Issue-Refactor (@Thelin90)
+- [#20348](https://github.com/apache/superset/pull/20348) fix(docker): Make Gunicorn Keepalive Adjustable (@mdeshmu)
+- [#20315](https://github.com/apache/superset/pull/20315) fix(chart): chart gets cut off on the dashboard (@stephenLYZ)
+- [#20235](https://github.com/apache/superset/pull/20235) fix: Box Plot Chart throws an error when the average (AVG) / SUM is being calculated on the Metrics (@diegomedina248)
+- [#20151](https://github.com/apache/superset/pull/20151) fix(csv): Ensure df_to_escaped_csv does not coerce integer columns to float (@john-bodley)
+- [#20173](https://github.com/apache/superset/pull/20173) fix: avoid while cycle in computeMaxFontSize for big Number run forever when css rule applied (@diegomedina248)
+- [#19570](https://github.com/apache/superset/pull/19570) fix: sqloxide optional (@betodealmeida)
+
+**Others**
+
+- [#21439](https://github.com/apache/superset/pull/21439) perf: Memoize the common_bootstrap_payload and include user param (#21018) (@bkyryliuk)
+- [#19703](https://github.com/apache/superset/pull/19703) chore(build): upgrade less-loader (@ktmud)
+- [#20550](https://github.com/apache/superset/pull/20550) chore: updating python docker image to 3.8.13 (@nisheldo)
+- [#21018](https://github.com/apache/superset/pull/21018) perf: Memoize the common_bootstrap_payload (@bkyryliuk)
+- [#20974](https://github.com/apache/superset/pull/20974) perf: Implement model specific lookups by id to improve performance (@bkyryliuk)
+- [#20273](https://github.com/apache/superset/pull/20273) chore: adjust the psycopg2 version of k8s installation guide (@ensky)
+
### 1.5.1 (Thu May 26 14:45:20 2022 +0300)
**Fixes**
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index bee3a24a1e78..a328cf44d770 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -106,7 +106,7 @@ This statement thanks the following, on which it draws for content and inspirati
# Slack Community Guidelines
-If you decide to join the [Community Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-16jvzmoi8-sI7jKWp~xc2zYRe~NqiY9Q), please adhere to the following rules:
+If you decide to join the [Community Slack](http://bit.ly/join-superset-slack), please adhere to the following rules:
**1. Treat everyone in the community with respect.**
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 653cfe41a5f0..c8f72d2b22b6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -52,7 +52,9 @@ little bit helps, and credit will always be given.
- [Revert Guidelines](#revert-guidelines)
- [Setup Local Environment for Development](#setup-local-environment-for-development)
- [Documentation](#documentation)
- - [Images](#images)
+ - [Local Development](#local-development)
+ - [Build](#build)
+ - [Deployment](#deployment)
- [Flask server](#flask-server)
- [OS Dependencies](#os-dependencies)
- [Dependencies](#dependencies)
@@ -124,7 +126,7 @@ Here's a list of repositories that contain Superset-related packages:
## Types of Contributions
-### Report Bug
+### Report a Bug
The best way to report a bug is to file an issue on GitHub. Please include:
@@ -136,15 +138,17 @@ The best way to report a bug is to file an issue on GitHub. Please include:
When posting Python stack traces, please quote them using
[Markdown blocks](https://help.github.com/articles/creating-and-highlighting-code-blocks/).
+_Please note that feature requests opened as Github Issues will be moved to Discussions._
+
### Submit Ideas or Feature Requests
-The best way is to file an issue on GitHub:
+The best way is to start an ["Ideas" Discussion thread](https://github.com/apache/superset/discussions/categories/ideas) on GitHub:
- Explain in detail how it would work.
- Keep the scope as narrow as possible, to make it easier to implement.
-- Remember that this is a volunteer-driven project, and that contributions are welcome :)
+- Remember that this is a volunteer-driven project, and that your contributions are as welcome as anyone's :)
-For large features or major changes to codebase, please create **Superset Improvement Proposal (SIP)**. See template from [SIP-0](https://github.com/apache/superset/issues/5602)
+To propose large features or major changes to codebase, and help usher in those changes, please create a **Superset Improvement Proposal (SIP)**. See template from [SIP-0](https://github.com/apache/superset/issues/5602)
### Fix Bugs
@@ -160,7 +164,7 @@ Look through the GitHub issues. Issues tagged with
Superset could always use better documentation,
whether as part of the official Superset docs,
-in docstrings, `docs/*.rst` or even on the web as blog posts or
+in docstrings, or even on the web as blog posts or
articles. See [Documentation](#documentation) for more details.
### Add Translations
@@ -388,23 +392,30 @@ cd superset
The latest documentation and tutorial are available at https://superset.apache.org/.
-The site is written using the Gatsby framework and docz for the
-documentation subsection. Find out more about it in `docs/README.md`
+The documentation site is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator, the source for which resides in `./docs`.
+
+#### Local Development
-#### Images
+To set up a local development environment with hot reloading for the documentation site:
-If you're adding new images to the documentation, you'll notice that the images
-referenced in the rst, e.g.
+```shell
+cd docs
+yarn install # Installs NPM dependencies
+yarn start # Starts development server at http://localhost:3000
+```
- .. image:: _static/images/tutorial/tutorial_01_sources_database.png
+#### Build
-aren't actually stored in that directory. Instead, you should add and commit
-images (and any other static assets) to the `superset-frontend/src/assets/images` directory.
-When the docs are deployed to https://superset.apache.org/, images
-are copied from there to the `_static/images` directory, just like they're referenced
-in the docs.
+To create and serve a production build of the documentation site:
-For example, the image referenced above actually lives in `superset-frontend/src/assets/images/tutorial`. Since the image is moved during the documentation build process, the docs reference the image in `_static/images/tutorial` instead.
+```shell
+yarn build
+yarn serve
+```
+
+#### Deployment
+
+Commits to `master` trigger a rebuild and redeploy of the documentation site. Submit pull requests that modify the documentation with the `docs:` prefix.
### Flask server
@@ -413,7 +424,7 @@ For example, the image referenced above actually lives in `superset-frontend/src
Make sure your machine meets the [OS dependencies](https://superset.apache.org/docs/installation/installing-superset-from-scratch#os-dependencies) before following these steps.
You also need to install MySQL or [MariaDB](https://mariadb.com/downloads).
-Ensure that you are using Python version 3.7 or 3.8, then proceed with:
+Ensure that you are using Python version 3.8, 3.9, 3.10 or 3.11, then proceed with:
```bash
# Create a virtual environment and activate it (recommended)
@@ -1021,7 +1032,7 @@ When contributing new React components to Superset, please try to add a Story al
## Translating
-We use [Babel](http://babel.pocoo.org/en/latest/) to translate Superset.
+We use [Flask-Babel](https://python-babel.github.io/flask-babel/) to translate Superset.
In Python files, we import the magic `_` function using:
```python
@@ -1064,6 +1075,7 @@ LANGUAGES = {
```
This script will
+
1. update the template file `superset/translations/messages.pot` with current application strings.
2. update language files with the new extracted strings.
@@ -1285,7 +1297,7 @@ To do this, you'll need to:
- Start up a celery worker
```shell script
- celery --app=superset.tasks.celery_app:app worker -Ofair
+ celery --app=superset.tasks.celery_app:app worker -O fair
```
Note that:
@@ -1315,6 +1327,7 @@ The following configuration settings are available for async queries (see config
- `GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT_FIREHOSE` - the maximum number of events for all users (FIFO eviction)
- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_NAME` - the async query feature uses a [JWT](https://tools.ietf.org/html/rfc7519) cookie for authentication, this setting is the cookie's name
- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_SECURE` - JWT cookie secure option
+- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_SAMESITE` - JWT cookie same site option
- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_DOMAIN` - JWT cookie domain option ([see docs for set_cookie](https://tedboy.github.io/flask/interface_api.response_object.html#flask.Response.set_cookie))
- `GLOBAL_ASYNC_QUERIES_JWT_SECRET` - JWT's use a secret key to sign and validate the contents. This value should be at least 32 bytes and have sufficient randomness for proper security
- `GLOBAL_ASYNC_QUERIES_TRANSPORT` - available options: "polling" (HTTP, default), "ws" (WebSocket, requires running superset-websocket server)
diff --git a/Dockerfile b/Dockerfile
index ae390f596cb9..48612a14e960 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -16,65 +16,35 @@
# limitations under the License.
#
-######################################################################
-# PY stage that simply does a pip install on our requirements
-######################################################################
-
-
-ARG PY_VER=3.8.12
-FROM python:${PY_VER} AS superset-py
-
-RUN mkdir /app \
- && apt-get update -y \
- && apt-get install -y --no-install-recommends \
- build-essential \
- default-libmysqlclient-dev \
- libpq-dev \
- libsasl2-dev \
- libecpg-dev \
- && rm -rf /var/lib/apt/lists/*
-
-# First, we just wanna install requirements, which will allow us to utilize the cache
-# in order to only build if and only if requirements change
-COPY ./requirements/*.txt /app/requirements/
-COPY setup.py MANIFEST.in README.md /app/
-COPY superset-frontend/package.json /app/superset-frontend/
-RUN cd /app \
- && mkdir -p superset/static \
- && touch superset/static/version_info.json \
- && pip install --no-cache -r requirements/local.txt
-
-
######################################################################
# Node stage to deal with static asset construction
######################################################################
-FROM node:16 AS superset-node
-
-ARG NPM_VER=7
-RUN npm install -g npm@${NPM_VER}
+ARG PY_VER=3.8.16-slim
+FROM node:16-slim AS superset-node
ARG NPM_BUILD_CMD="build"
ENV BUILD_CMD=${NPM_BUILD_CMD}
+ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
# NPM ci first, as to NOT invalidate previous steps except for when package.json changes
RUN mkdir -p /app/superset-frontend
-RUN mkdir -p /app/superset/assets
+
COPY ./docker/frontend-mem-nag.sh /
-COPY ./superset-frontend /app/superset-frontend
-RUN /frontend-mem-nag.sh \
- && cd /app/superset-frontend \
- && npm ci --legacy-peer-deps
+RUN /frontend-mem-nag.sh
-# This seems to be the most expensive step
-RUN cd /app/superset-frontend \
- && npm run ${BUILD_CMD} \
- && rm -rf node_modules
+WORKDIR /app/superset-frontend/
+
+COPY superset-frontend/package*.json ./
+RUN npm ci --legacy-peer-deps
+COPY ./superset-frontend .
+
+# This seems to be the most expensive step
+RUN npm run ${BUILD_CMD}
######################################################################
# Final lean image...
######################################################################
-ARG PY_VER=3.8.12
FROM python:${PY_VER} AS lean
ENV LANG=C.UTF-8 \
@@ -90,17 +60,26 @@ RUN mkdir -p ${PYTHONPATH} \
&& apt-get update -y \
&& apt-get install -y --no-install-recommends \
build-essential \
+ curl \
default-libmysqlclient-dev \
+ libsasl2-dev \
libsasl2-modules-gssapi-mit \
libpq-dev \
libecpg-dev \
&& rm -rf /var/lib/apt/lists/*
-COPY --from=superset-py /usr/local/lib/python3.8/site-packages/ /usr/local/lib/python3.8/site-packages/
-# Copying site-packages doesn't move the CLIs, so let's copy them one by one
-COPY --from=superset-py /usr/local/bin/gunicorn /usr/local/bin/celery /usr/local/bin/flask /usr/bin/
+COPY ./requirements/*.txt /app/requirements/
+COPY setup.py MANIFEST.in README.md /app/
+
+# setup.py uses the version information in package.json
+COPY superset-frontend/package.json /app/superset-frontend/
+
+RUN cd /app \
+ && mkdir -p superset/static \
+ && touch superset/static/version_info.json \
+ && pip install --no-cache -r requirements/local.txt
+
COPY --from=superset-node /app/superset/static/assets /app/superset/static/assets
-COPY --from=superset-node /app/superset-frontend /app/superset-frontend
## Lastly, let's install superset itself
COPY superset /app/superset
@@ -128,15 +107,15 @@ CMD /usr/bin/run-server.sh
# Dev image...
######################################################################
FROM lean AS dev
-ARG GECKODRIVER_VERSION=v0.28.0
-ARG FIREFOX_VERSION=88.0
+ARG GECKODRIVER_VERSION=v0.32.0
+ARG FIREFOX_VERSION=106.0.3
COPY ./requirements/*.txt ./docker/requirements-*.txt/ /app/requirements/
USER root
RUN apt-get update -y \
- && apt-get install -y --no-install-recommends libnss3 libdbus-glib-1-2 libgtk-3-0 libx11-xcb1
+ && apt-get install -y --no-install-recommends libnss3 libdbus-glib-1-2 libgtk-3-0 libx11-xcb1 wget
# Install GeckoDriver WebDriver
RUN wget https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O /tmp/geckodriver.tar.gz && \
diff --git a/Makefile b/Makefile
index 8dc7ffa8f569..fbe0fc8bfcb1 100644
--- a/Makefile
+++ b/Makefile
@@ -15,8 +15,8 @@
# limitations under the License.
#
-# Python version installed; we need 3.8-3.9
-PYTHON=`command -v python3.9 || command -v python3.8`
+# Python version installed; we need 3.8-3.11
+PYTHON=`command -v python3.11 || command -v python3.10 || command -v python3.9 || command -v python3.8`
.PHONY: install superset venv pre-commit
@@ -47,7 +47,7 @@ superset:
superset load-examples
# Install node packages
- cd superset-frontend; npm install
+ cd superset-frontend; npm ci
update: update-py update-js
@@ -70,7 +70,7 @@ update-js:
venv:
# Create a virtual environment and activate it (recommended)
- if ! [ -x "${PYTHON}" ]; then echo "You need Python 3.8 or 3.9 installed"; exit 1; fi
+ if ! [ -x "${PYTHON}" ]; then echo "You need Python 3.8, 3.9, 3.10 or 3.11 installed"; exit 1; fi
test -d venv || ${PYTHON} -m venv venv # setup a python3 virtualenv
. venv/bin/activate
@@ -101,11 +101,17 @@ node-app:
build-cypress:
cd superset-frontend; npm run build-instrumented
- cd superset-frontend/cypress-base; npm install
+ cd superset-frontend/cypress-base; npm ci
open-cypress:
if ! [ $(port) ]; then cd superset-frontend/cypress-base; CYPRESS_BASE_URL=http://localhost:9000 npm run cypress open; fi
cd superset-frontend/cypress-base; CYPRESS_BASE_URL=http://localhost:$(port) npm run cypress open
+report-celery-worker:
+ celery --app=superset.tasks.celery_app:app worker
+
+report-celery-beat:
+ celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedulecd
+
admin-user:
superset fab create-admin
diff --git a/README.md b/README.md
index 5bea6eed78ba..ce805862878c 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@ under the License.
[![PyPI version](https://badge.fury.io/py/apache-superset.svg)](https://badge.fury.io/py/apache-superset)
[![Coverage Status](https://codecov.io/github/apache/superset/coverage.svg?branch=master)](https://codecov.io/github/apache/superset)
[![PyPI](https://img.shields.io/pypi/pyversions/apache-superset.svg?maxAge=2592000)](https://pypi.python.org/pypi/apache-superset)
-[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://join.slack.com/t/apache-superset/shared_invite/zt-16jvzmoi8-sI7jKWp~xc2zYRe~NqiY9Q)
+[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](http://bit.ly/join-superset-slack)
[![Documentation](https://img.shields.io/badge/docs-apache.org-blue.svg)](https://superset.apache.org)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-**A more comprehensive list of supported databases** along with the configuration instructions can be found
-[here](https://superset.apache.org/docs/databases/installing-database-drivers).
+**A more comprehensive list of supported databases** along with the configuration instructions can be found [here](https://superset.apache.org/docs/databases/installing-database-drivers).
Want to add support for your datastore or data engine? Read more [here](https://superset.apache.org/docs/frequently-asked-questions#does-superset-work-with-insert-database-engine-here) about the technical requirements.
@@ -129,7 +129,7 @@ Want to add support for your datastore or data engine? Read more [here](https://
## Get Involved
- Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
-- [Join our community's Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-16jvzmoi8-sI7jKWp~xc2zYRe~NqiY9Q)
+- [Join our community's Slack](http://bit.ly/join-superset-slack)
and please read our [Slack Community Guidelines](https://github.com/apache/superset/blob/master/CODE_OF_CONDUCT.md#slack-community-guidelines)
- [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org)
@@ -142,26 +142,37 @@ how to set up a development environment.
## Resources
+Superset 2.0!
+- [Superset 2.0 Meetup](https://preset.io/events/superset-2-0-meetup/)
+- [Superset 2.0 Release Notes](https://github.com/apache/superset/tree/master/RELEASING/release-notes-2-0)
+
+Understanding the Superset Points of View
+- [The Case for Dataset-Centric Visualization](https://preset.io/blog/dataset-centric-visualization/)
+- [Understanding the Superset Semantic Layer](https://preset.io/blog/understanding-superset-semantic-layer/)
+
+
- Getting Started with Superset
- [Superset in 2 Minutes using Docker Compose](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose#installing-superset-locally-using-docker-compose)
- [Installing Database Drivers](https://superset.apache.org/docs/databases/docker-add-drivers/)
- [Building New Database Connectors](https://preset.io/blog/building-database-connector/)
- [Create Your First Dashboard](https://superset.apache.org/docs/creating-charts-dashboards/first-dashboard)
- [Comprehensive Tutorial for Contributing Code to Apache Superset
-](https://preset.io/blog/tutorial-contributing-code-to-apache-superset/)
-- [Documentation for Superset End-Users (by Preset)](https://docs.preset.io/docs/terminology)
+ ](https://preset.io/blog/tutorial-contributing-code-to-apache-superset/)
+- [Resources to master Superset by Preset](https://preset.io/resources/)
+
- Deploying Superset
- [Official Docker image](https://hub.docker.com/r/apache/superset)
- [Helm Chart](https://github.com/apache/superset/tree/master/helm/superset)
+
- Recordings of Past [Superset Community Events](https://preset.io/events)
- - [Live Demo: Interactive Time-series Analysis with Druid and Superset](https://preset.io/events/2021-03-02-interactive-time-series-analysis-with-druid-and-superset/)
+ - [Mixed Time Series Charts](https://preset.io/events/mixed-time-series-visualization-in-superset-workshop/)
+ - [How the Bing Team Customized Superset for the Internal Self-Serve Data & Analytics Platform](https://preset.io/events/how-the-bing-team-heavily-customized-superset-for-their-internal-data/)
- [Live Demo: Visualizing MongoDB and Pinot Data using Trino](https://preset.io/events/2021-04-13-visualizing-mongodb-and-pinot-data-using-trino/)
- - [Superset Contributor Bootcamp](https://preset.io/events/superset-contributor-bootcamp-dec-21/)
- [Introduction to the Superset API](https://preset.io/events/introduction-to-the-superset-api/)
- - [Apache Superset 1.3 Meetup](https://preset.io/events/apache-superset-1-3/)
- [Building a Database Connector for Superset](https://preset.io/events/2021-02-16-building-a-database-connector-for-superset/)
+
- Visualizations
- - [Building Custom Viz Plugins](https://superset.apache.org/docs/installation/building-custom-viz-plugins)
+ - [Creating Viz Plugins](https://superset.apache.org/docs/contributing/creating-viz-plugins/)
- [Managing and Deploying Custom Viz Plugins](https://medium.com/nmc-techblog/apache-superset-manage-custom-viz-plugins-in-production-9fde1a708e55)
- [Why Apache Superset is Betting on Apache ECharts](https://preset.io/blog/2021-4-1-why-echarts/)
diff --git a/RELEASING/Dockerfile.from_local_tarball b/RELEASING/Dockerfile.from_local_tarball
index 3cd030609b60..4860db64287c 100644
--- a/RELEASING/Dockerfile.from_local_tarball
+++ b/RELEASING/Dockerfile.from_local_tarball
@@ -24,13 +24,13 @@ ENV LANG=C.UTF-8 \
RUN apt-get update -y
-# Install dependencies to fix `curl https support error` and `elaying package configuration warning`
+# Install dependencies to fix `curl https support error` and `delaying package configuration warning`
RUN apt-get install -y apt-transport-https apt-utils
# Install superset dependencies
# https://superset.apache.org/docs/installation/installing-superset-from-scratch
RUN apt-get install -y build-essential libssl-dev \
- libffi-dev python3-dev libsasl2-dev libldap2-dev libxi-dev
+ libffi-dev python3-dev libsasl2-dev libldap2-dev libxi-dev chromium
# Install nodejs for custom build
# https://nodejs.org/en/download/package-manager/
diff --git a/RELEASING/Dockerfile.from_svn_tarball b/RELEASING/Dockerfile.from_svn_tarball
index 482ab474a58e..3deea5b8d354 100644
--- a/RELEASING/Dockerfile.from_svn_tarball
+++ b/RELEASING/Dockerfile.from_svn_tarball
@@ -24,13 +24,13 @@ ENV LANG=C.UTF-8 \
RUN apt-get update -y
-# Install dependencies to fix `curl https support error` and `elaying package configuration warning`
+# Install dependencies to fix `curl https support error` and `delaying package configuration warning`
RUN apt-get install -y apt-transport-https apt-utils
# Install superset dependencies
# https://superset.apache.org/docs/installation/installing-superset-from-scratch
RUN apt-get install -y build-essential libssl-dev \
- libffi-dev python3-dev libsasl2-dev libldap2-dev libxi-dev
+ libffi-dev python3-dev libsasl2-dev libldap2-dev libxi-dev chromium
# Install nodejs for custom build
# https://nodejs.org/en/download/package-manager/
diff --git a/RELEASING/README.md b/RELEASING/README.md
index 1d3285e0ffc3..901d21aefb3d 100644
--- a/RELEASING/README.md
+++ b/RELEASING/README.md
@@ -30,6 +30,7 @@ partaking in the process should join the channel.
## Release notes for recent releases
+- [2.0](release-notes-2-0/README.md)
- [1.5](release-notes-1-5/README.md)
- [1.4](release-notes-1-4/README.md)
- [1.3](release-notes-1-3/README.md)
@@ -289,10 +290,6 @@ git tag ${SUPERSET_VERSION_RC}
git push origin ${SUPERSET_VERSION_RC}
```
-### Create a release on Github
-
-After submitting the tag, follow the steps [here](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository) to create the release. Use the vote email text as the content for the release description. Make sure to check the "This is a pre-release" checkbox for release canditates. You can check previous releases if you need an example.
-
## Preparing the release candidate
The first step of preparing an Apache Release is packaging a release candidate
@@ -346,7 +343,11 @@ To build and run the recently created tarball **from SVN**:
# login using admin/admin
```
-### Voting
+## Create a release on Github
+
+After submitting the tag and testing the release candidate, follow the steps [here](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository) to create the release on GitHub. Use the vote email text as the content for the release description. Make sure to check the "This is a pre-release" checkbox for release candidates. You can check previous releases if you need an example.
+
+## Voting
Now you're ready to start the [VOTE] thread. Here's an example of a
previous release vote thread:
@@ -384,7 +385,7 @@ A List of people with -1 vote (ex: John):
The script will generate the email text that should be sent to dev@superset.apache.org using an email client. The release version and release candidate number are fetched from the previously set environment variables.
-### Validating a release
+## Validating a release
https://www.apache.org/info/verification.html
@@ -458,11 +459,14 @@ while requesting access to push packages.
```bash
twine upload dist/apache-superset-${SUPERSET_VERSION}.tar.gz
-
-# Set your username to token
-# Set your password to the token value, including the pypi- prefix
```
+Set your username to `__token__`
+
+Set your password to the token value, including the `pypi-` prefix
+
+More information on https://pypi.org/help/#apitoken
+
### Announcing
Once it's all done, an [ANNOUNCE] thread announcing the release to the dev@ mailing list is the final step.
diff --git a/RELEASING/release-notes-2-0/README.md b/RELEASING/release-notes-2-0/README.md
new file mode 100644
index 000000000000..193a1e7424b7
--- /dev/null
+++ b/RELEASING/release-notes-2-0/README.md
@@ -0,0 +1,152 @@
+
+
+# Release Notes for Superset 2.0
+
+Superset 2.0 is a big step forward. This release cleans up many legacy code paths and feature flags, and deprecates lots of legacy behaviors in Superset.
+
+- [**Developer Experience**](#developer-experience)
+- [**Features**](#features)
+- [**Config and Feature flags**](#config-and-feature-flags)
+- [**Breaking Changes**](#breaking-changes)
+
+## Developer Experience
+
+- Addition of a statsd guage metric for Slack and email notifications for increased visibility into errors around alerts / reports ([#20158](https://github.com/apache/superset/pull/20158))
+
+- Helm chart now supports resource limits and requests for each component ([#20052](https://github.com/apache/superset/pull/20052))
+
+- New Github workflow to test Storybook Netlify instance nightly ([#19852](https://github.com/apache/superset/pull/19852))
+
+- Minimum requirement for Superset is now Python 3.8 ([#19017](https://github.com/apache/superset/pull/19017)
+
+## Features
+
+**Charting and Dashboard Experience**
+
+Support for horizontal bar chart added ([#19918](https://github.com/apache/superset/pull/19918))
+
+![horizontal](https://user-images.githubusercontent.com/11830681/166248149-4946388a-5051-4d13-a516-50a81e9b5be3.png)
+
+Time Series Charts now support stacking of both negative and positive values ([#20408](https://github.com/apache/superset/pull/20408))
+
+![negative](https://user-images.githubusercontent.com/15073128/174057996-52255bfe-60c3-4727-be99-e328c124e439.png)
+
+- Pie charts now defaults to a row limit of 100 to prevent crashes when a high-cardinality column is chosen as the dimension ([#20392](https://github.com/apache/superset/pull/20392))
+
+- World map chart now supports coloring either by metric or by the country column ([#19881](https://github.com/apache/superset/pull/19881))
+
+- Table visualization now supports drag and drop for columns ([#19381](https://github.com/apache/superset/pull/19381))
+
+- Mixed chart now supports Advanced Analytics ([#19851](https://github.com/apache/superset/pull/19851))
+
+- Add support for generic x-axis (non-time-series) in the Mixed Chart ([#20097](https://github.com/apache/superset/pull/20097))
+
+![Image](https://user-images.githubusercontent.com/33317356/168807749-b021c04c-8902-4b4f-a7a4-f21544fb678e.png)
+
+- Charts can now be created in Edit Dashboard mode ([#20126](https://github.com/apache/superset/pull/20126))
+
+![Image](https://user-images.githubusercontent.com/15073128/169251205-2c0f36bb-17e0-4549-aa84-66a58a377603.png)
+
+- Add aggregate total for Pie charts ([#19622](https://github.com/apache/superset/pull/19622))
+
+- Legend is now enabled by default for relevant charts ([#19927](https://github.com/apache/superset/pull/19927))
+
+**View Results Experience**
+
+- Explore and Dashboard views now support displaying of multiple results ([#20277](https://github.com/apache/superset/pull/20277))
+
+- Results pane in Dashboard view now more closely mirrors rich functionality from Results pane in Explore ([#20144](https://github.com/apache/superset/pull/20144))
+
+
+**Quality of Life**
+
+- Edit Dataset modal now doesn't close when you click away ([#20278](https://github.com/apache/superset/pull/20278))
+
+- When editing the label in the Metrics popover, pressing Enter now saves what you typed ([#19898](https://github.com/apache/superset/pull/19898))
+
+- When adding new chart from the dashboard view, the dashboard name will now pre-fill ([#20129](https://github.com/apache/superset/pull/20129))
+
+- Annotations now have an improved empty state ([#20160](https://github.com/apache/superset/pull/20160))
+
+- Confirmational modal is now shown if user exits Explore without saving changes ([#19993](https://github.com/apache/superset/pull/19993))
+
+- Explore popovers now close when the Escape key is pressed ([#19902](https://github.com/apache/superset/pull/19902))
+
+- Run and Save buttons are redesigned for improved usability ([#19558](https://github.com/apache/superset/pull/19558))
+
+**Databases**
+
+- Native database driver for Databricks ([#20320](https://github.com/apache/superset/pull/20320))
+
+- Time grains for SQLite are now simplified ([#19745](https://github.com/apache/superset/pull/19745))
+
+- Multiple upgrades to the Trino database engine ([#20152](https://github.com/apache/superset/pull/20152))
+
+- Switch from sqlalchemy-trino to trino-python-client ([#19957](https://github.com/apache/superset/pull/19957))
+
+- Apache Pinot now supports more time grains in Superset ([#19724](https://github.com/apache/superset/pull/19724))
+
+**Jinja**
+
+- New Jinja macro enables querying / referencing both physical and virtual datasets in SQL Lab ([#15241](https://github.com/apache/superset/pull/15241))
+
+- New Jinja macro added to improve experience of including multiple items ([#19574](https://github.com/apache/superset/pull/19574))
+
+**Other**
+
+- Datasets can now be filtered by their certification status ([#20136](https://github.com/apache/superset/pull/20136))
+
+
+## Config and Feature Flags
+
+- Initial implementation of advanced types ([#18794](https://github.com/apache/superset/pull/18794))
+ - Flag: `ENABLE_ADVANCED_DATA_TYPES`
+
+- Caching can now be enabled in database setups when user impersonation is enabled ([#20114](https://github.com/apache/superset/pull/20114))
+ - Flag: `CACHE_IMPERSONATION`
+
+- Control behavior for how color palettes are chosen ([#19987](https://github.com/apache/superset/pull/19987))
+ - Flag: `USE_ANALAGOUS_COLORS`
+
+- Enabling non-time-series x-axis in some charts ([#20097](https://github.com/apache/superset/pull/20097))
+ - Flag: `GENERIC_CHART_AXES`
+
+- As part of the 2.0 cleanup efforts, the following feature flags were removed (which means the behavior is now permanently enabled):
+ - `ROW_LEVEL_SECURITY`
+ - `ENABLE_REACT_CRUD_VIEWS`
+ - `PUBLIC_ROLE_LIKE_GAMMA`
+
+- The following feature flags are now True by default, but can be turned back to False:
+ - `ENABLE_EXPLORE_DRAG_AND_DROP`
+ - `ENABLE_DND_WITH_CLICK_UX`
+ - `DISABLE_LEGACY_DATASOURCE_EDITOR`
+ - `SQLLAB_BACKEND_PERSISTENCE`
+ - `VERSIONED_EXPORT`
+
+- The following config flags were removed:
+ - `APP_ICON_WIDTH`
+
+- A number of legacy interim flags were removed around SIP-15 ([#18936](https://github.com/apache/superset/pull/18936))
+
+- The `ENABLE_JAVASCRIPT_CONTROLS` flag was moved from an app config to a feature flag
+
+## Breaking Changes
+
+To learn more about the breaking changes in 2.0, please read [UPDATING.MD](https://github.com/apache/superset/blob/master/UPDATING.md)
diff --git a/RELEASING/release-notes-2-0/changelog.md b/RELEASING/release-notes-2-0/changelog.md
new file mode 100644
index 000000000000..4b3b5ddfaef2
--- /dev/null
+++ b/RELEASING/release-notes-2-0/changelog.md
@@ -0,0 +1,491 @@
+
+
+### 2.0 (Thu Jun 23 05:39:46 2022 -0600)
+
+**Database Migrations**
+
+- [#20385](https://github.com/apache/superset/pull/20385) fix(migration): Ensure key_value LargeBinary is encoded as a MEDIUMBLOB as opposed to BLOB for MySQL (@john-bodley)
+- [#20449](https://github.com/apache/superset/pull/20449) fix: RLS new db migration downgrade fails on SQLite (@dpgaspar)
+- [#20284](https://github.com/apache/superset/pull/20284) chore(migrations): Renaming migration files so that they're easier to keep track of (@craig-rueda)
+- [#20108](https://github.com/apache/superset/pull/20108) fix: None dataset and schema permissions (@dpgaspar)
+- [#18794](https://github.com/apache/superset/pull/18794) feat(business-types): initial implementation of SIP-78 (@cccs-RyanS)
+- [#20073](https://github.com/apache/superset/pull/20073) fix(dataset): handle missing sqla uri in migration (@villebro)
+- [#19941](https://github.com/apache/superset/pull/19941) fix(reports): Clear last value when state is WORKING (@john-bodley)
+- [#19675](https://github.com/apache/superset/pull/19675) chore(docs): Spelling (@jsoref)
+- [#19793](https://github.com/apache/superset/pull/19793) fix(SIP-68): handle empty table name during migration (@ktmud)
+- [#19786](https://github.com/apache/superset/pull/19786) fix(migrations): coalesce is_temporal when inserting into sl_columns (@cemremengu)
+- [#19421](https://github.com/apache/superset/pull/19421) perf: refactor SIP-68 db migrations with INSERT SELECT FROM (@ktmud)
+- [#19767](https://github.com/apache/superset/pull/19767) fix: Fix migration for removing time_range_endpoints 3 (@hughhhh)
+- [#19728](https://github.com/apache/superset/pull/19728) fix: Removetime_range_endpoints from query context object pt 2 (@hughhhh)
+- [#19630](https://github.com/apache/superset/pull/19630) chore: clean up unused imports in db migration scripts (@ktmud)
+- [#19577](https://github.com/apache/superset/pull/19577) fix: merge multiple db heads (@eschutho)
+- [#19243](https://github.com/apache/superset/pull/19243) fix: cannot delete a database if team member has SQL editor tab that uses that db (@diegomedina248)
+- [#19537](https://github.com/apache/superset/pull/19537) chore: block unsafe functions (@betodealmeida)
+- [#19513](https://github.com/apache/superset/pull/19513) chore: postpone timerange endpoint removal (@villebro)
+- [#19495](https://github.com/apache/superset/pull/19495) perf: speed up db migration for deprecating time_range_endpoints (@ktmud)
+- [#19474](https://github.com/apache/superset/pull/19474) fix: handle null params in #18936 migration (@serenajiang)
+- [#19423](https://github.com/apache/superset/pull/19423) fix: Remove`time_range_endpoints` from query context object (@hughhhh)
+- [#18936](https://github.com/apache/superset/pull/18936) chore: Remove legacy SIP-15 interim logic/flags (@john-bodley)
+
+**Features**
+- [#20114](https://github.com/apache/superset/pull/20114) feat(chart): Enable caching per user when user impersonation is enabled (@Samira-El)
+- [#20408](https://github.com/apache/superset/pull/20408) feat(plugin-chart-echarts): Support stacking negative and positive values (@kgabryje)
+- [#20278](https://github.com/apache/superset/pull/20278) feat: Prevent dataset edit modal closing on click-away in edit mode (@reesercollins)
+- [#20392](https://github.com/apache/superset/pull/20392) feat: setting limit value when Pie chart switches (@zhaoyongjie)
+- [#20373](https://github.com/apache/superset/pull/20373) feat: adding truncate metric control on timeseries charts (@zhaoyongjie)
+- [#20248](https://github.com/apache/superset/pull/20248) feat(explore): Implement viz switcher redesign (@kgabryje)
+- [#20113](https://github.com/apache/superset/pull/20113) feat(api): Added "kind" to dataset/ endpoint (@reesercollins)
+- [#20299](https://github.com/apache/superset/pull/20299) feat(explore): Dataset Panel Options when Source = Query II (@lyndsiWilliams)
+- [#20320](https://github.com/apache/superset/pull/20320) feat: Databricks native driver (@betodealmeida)
+- [#20313](https://github.com/apache/superset/pull/20313) feat(explore): Denormalize form data in echarts, world map and nvd3 bar and line charts (@kgabryje)
+- [#20277](https://github.com/apache/superset/pull/20277) feat: multiple results pane on explore and dashboard (@zhaoyongjie)
+- [#19898](https://github.com/apache/superset/pull/19898) feat: When editing the label/title in the Metrics popover, hitting Enter should save what you've typed (@diegomedina248)
+- [#16493](https://github.com/apache/superset/pull/16493) feat(plugin-chart-echarts): [feature-parity] support extra control for the area chart V2 (@stephenLYZ)
+- [#19855](https://github.com/apache/superset/pull/19855) feat(explore): Frontend implementation of dataset creation from infobox (@lyndsiWilliams)
+- [#20165](https://github.com/apache/superset/pull/20165) feat: add modfied col and timezone info to schedule col (@pkdotson)
+- [#20144](https://github.com/apache/superset/pull/20144) feat: showing results pane in dashboard (@zhaoyongjie)
+- [#20242](https://github.com/apache/superset/pull/20242) feat: derived metrics use different line style (@zhaoyongjie)
+- [#20010](https://github.com/apache/superset/pull/20010) feat: standardized form_data (@zhaoyongjie)
+- [#19987](https://github.com/apache/superset/pull/19987) feat(superset-ui-core): add feature flag for the analogous colors (@stephenLYZ)
+- [#19881](https://github.com/apache/superset/pull/19881) feat(world-map): support color by metric or country column (@stephenLYZ)
+- [#19981](https://github.com/apache/superset/pull/19981) feat!: pass datasource_type and datasource_id to form_data (@eschutho)
+- [#15241](https://github.com/apache/superset/pull/15241) feat: query datasets from SQL Lab (@betodealmeida)
+- [#20129](https://github.com/apache/superset/pull/20129) feat(explore): Fill dashboard name when adding new chart from dashboard view (@kgabryje)
+- [#20160](https://github.com/apache/superset/pull/20160) feat(explore): Add empty state to annotations (@kgabryje)
+- [#20134](https://github.com/apache/superset/pull/20134) feat: add Query.columns for bootstrap_data (@hughhhh)
+- [#20158](https://github.com/apache/superset/pull/20158) feat: add statsd metrics for notifications (@dpgaspar)
+- [#20052](https://github.com/apache/superset/pull/20052) feat(Helm Chart): Support resource limits and requests for each component (@rathberm)
+- [#20170](https://github.com/apache/superset/pull/20170) feat: add samples endpoint (@zhaoyongjie)
+- [#19381](https://github.com/apache/superset/pull/19381) feat: add drag and drop column rearrangement for table viz (@stevetracvc)
+- [#20136](https://github.com/apache/superset/pull/20136) feat: Add Certified filter to Datasets (@hughhhh)
+- [#20111](https://github.com/apache/superset/pull/20111) feat(dashboard): Chart title click redirects to Explore in new tab (@kgabryje)
+- [#20097](https://github.com/apache/superset/pull/20097) feat(plugin-chart-echarts): add support for generic axis to mixed chart (@villebro)
+- [#20126](https://github.com/apache/superset/pull/20126) feat(dashboard): Add create chart button in dashboard edit mode (@kgabryje)
+- [#20059](https://github.com/apache/superset/pull/20059) feat: Save column data into json_metadata for all Query executions (@hughhhh)
+- [#19918](https://github.com/apache/superset/pull/19918) feat(plugin-chart-echarts): support horizontal bar chart (@stephenLYZ)
+- [#19902](https://github.com/apache/superset/pull/19902) feat: Explore popovers should close on escape (@diegomedina248)
+- [#20049](https://github.com/apache/superset/pull/20049) feat(dashboard): Rearrange items in chart header controls dropdown (@kgabryje)
+- [#20030](https://github.com/apache/superset/pull/20030) feat(sip-68): Add DatasourceDAO class to manage querying different datasources easier (@hughhhh)
+- [#19581](https://github.com/apache/superset/pull/19581) feat(viz-gallery): add search weight for viz-name (@stephenLYZ)
+- [#19999](https://github.com/apache/superset/pull/19999) feat: RLS for SQL Lab (@betodealmeida)
+- [#19993](https://github.com/apache/superset/pull/19993) feat(explore): Show confirmation modal if user exits Explore without saving changes (@kgabryje)
+- [#19873](https://github.com/apache/superset/pull/19873) feat(css): adds `chartId`-based class to dashboard chart holder (@rusackas)
+- [#20002](https://github.com/apache/superset/pull/20002) feat: deprecate /superset/testconn and migrate to api v1 (@zephyring)
+- [#19935](https://github.com/apache/superset/pull/19935) feat: deprecate /superset/validate_sql_json migrate to api v1 (@dpgaspar)
+- [#20015](https://github.com/apache/superset/pull/20015) feat: add new enums for datasource types (@hughhhh)
+- [#19956](https://github.com/apache/superset/pull/19956) feat: Applitools Cypress workflow (@geido)
+- [#19852](https://github.com/apache/superset/pull/19852) feat: Run Applitools on public Storybook (@geido)
+- [#19963](https://github.com/apache/superset/pull/19963) feat: Add cypress test for downloading chart as image (@codemaster08240328)
+- [#19957](https://github.com/apache/superset/pull/19957) feat: switch from `sqlalchemy-trino` to `trino-python-client` (@dungdm93)
+- [#19921](https://github.com/apache/superset/pull/19921) feat: deprecate /superset/extra_table_metadata migrate to api v1 (@dpgaspar)
+- [#19745](https://github.com/apache/superset/pull/19745) feat: simplify SQLite time grain (@betodealmeida)
+- [#19927](https://github.com/apache/superset/pull/19927) feat(chart & legend): make to enable show legend by default (@prosdev0107)
+- [#19754](https://github.com/apache/superset/pull/19754) feat: deprecate old API on core superset fave_dashboards (@dpgaspar)
+- [#19905](https://github.com/apache/superset/pull/19905) feat: simplify `memoized_func` (@betodealmeida)
+- [#19871](https://github.com/apache/superset/pull/19871) feat(filter): make to hide sort filter when time range (@prosdev0107)
+- [#19851](https://github.com/apache/superset/pull/19851) feat: add Advanced Analytics into mixed time series chart (@zhaoyongjie)
+- [#19692](https://github.com/apache/superset/pull/19692) feat: Update ShortKey for stop query running in SqlLab editor (@codemaster08240328)
+- [#17903](https://github.com/apache/superset/pull/17903) feat: Adds plugin-chart-handlebars (@jdbranham)
+- [#19748](https://github.com/apache/superset/pull/19748) feat(explore): improve UI in the control panel (@stephenLYZ)
+- [#19724](https://github.com/apache/superset/pull/19724) feat: 10/15/30 min grain to Pinot (@hughhhh)
+- [#19696](https://github.com/apache/superset/pull/19696) feat(explore): Replace overlay with alert banner when chart controls change (@kgabryje)
+- [#19751](https://github.com/apache/superset/pull/19751) feat(explore): Implement data panel redesign (@kgabryje)
+- [#19598](https://github.com/apache/superset/pull/19598) feat: add empty states to sqlab editor and select (@pkdotson)
+- [#19450](https://github.com/apache/superset/pull/19450) feat: Remove legacy sql alchemy db connection link from G Sheet connection (@codemaster08240328)
+- [#19710](https://github.com/apache/superset/pull/19710) feat: Enabling source maps full time (@rusackas)
+- [#19671](https://github.com/apache/superset/pull/19671) feat: UI override registry (@suddjian)
+- [#19691](https://github.com/apache/superset/pull/19691) feat(explore): More explicit labels of adhoc filter operators (@kgabryje)
+- [#19558](https://github.com/apache/superset/pull/19558) feat(explore): Redesign of Run/Save buttons (@kgabryje)
+- [#19650](https://github.com/apache/superset/pull/19650) feat(embedded): API get embedded dashboard config by uuid (@lilykuang)
+- [#19310](https://github.com/apache/superset/pull/19310) feat(CRUD): add new empty state (@stephenLYZ)
+- [#19622](https://github.com/apache/superset/pull/19622) feat(plugin-chart-echarts): add aggregate total for the Pie/Donuct chart (@stephenLYZ)
+- [#19314](https://github.com/apache/superset/pull/19314) feat: Move Database Import option into DB Connection modal (@lyndsiWilliams)
+- [#19434](https://github.com/apache/superset/pull/19434) feat: deprecate old API and create new API for dashes created by me (@dpgaspar)
+- [#19482](https://github.com/apache/superset/pull/19482) feat: add success toast to alerts and reports (@pkdotson)
+- [#19574](https://github.com/apache/superset/pull/19574) feat: add a `where_in` filter for Jinja2 (@betodealmeida)
+- [#19458](https://github.com/apache/superset/pull/19458) feat(explore): Move timer, row counter and cached pills to chart container (@kgabryje)
+- [#19529](https://github.com/apache/superset/pull/19529) feat(explore): Move chart header to top of the page (@kgabryje)
+- [#19489](https://github.com/apache/superset/pull/19489) feat(CI): clean up Python tests output (@ktmud)
+- [#19308](https://github.com/apache/superset/pull/19308) feat(explore): SQL popover in datasource panel (@kgabryje)
+- [#19325](https://github.com/apache/superset/pull/19325) feat(color): support analogous colors to prevent color conflict (@stephenLYZ)
+- [#19408](https://github.com/apache/superset/pull/19408) feat(dashboard): Implement empty states for empty tabs (@kgabryje)
+- [#19446](https://github.com/apache/superset/pull/19446) feat(explore): Move chart actions into dropdown (@kgabryje)
+- [#19394](https://github.com/apache/superset/pull/19394) feat(explore): UI changes in dataset panel on Explore page (@kgabryje)
+
+**Fixes**
+- [#19920](https://github.com/apache/superset/pull/19920) fix(table viz): correctly sort by multiple columns in a table (@stevetracvc)
+- [#20402](https://github.com/apache/superset/pull/20402) fix: alert & reports active toggle optimistic update (@diegomedina248)
+- [#20472](https://github.com/apache/superset/pull/20472) fix: Changes the return type of get_permissions to be JSON friendly (@michael-s-molina)
+- [#20468](https://github.com/apache/superset/pull/20468) fix: async queries limit bug (@AAfghahi)
+- [#20257](https://github.com/apache/superset/pull/20257) fix(home): Show home page tabs as pills instead of links (@prosdev0107)
+- [#20340](https://github.com/apache/superset/pull/20340) fix: ensure column name in description is string (@betodealmeida)
+- [#20350](https://github.com/apache/superset/pull/20350) fix(viz): BigQuery time grain 'minute'/'second' throws an error (@diegomedina248)
+- [#20384](https://github.com/apache/superset/pull/20384) fix(chart & table): Prevent the dates from wrapping in table chart (@prosdev0107)
+- [#20404](https://github.com/apache/superset/pull/20404) fix: suppress translation warning in jest (@zhaoyongjie)
+- [#20451](https://github.com/apache/superset/pull/20451) fix: should raise exception when apply a categorical axis (@zhaoyongjie)
+- [#20447](https://github.com/apache/superset/pull/20447) fix: table viz sort icon bottom aligned (@diegomedina248)
+- [#20326](https://github.com/apache/superset/pull/20326) fix(fbprophet): Fix weekly frequencies (@john-bodley)
+- [#20434](https://github.com/apache/superset/pull/20434) fix(20428): Address-Presto/Trino-Poll-Issue-Refactor (@Thelin90)
+- [#20411](https://github.com/apache/superset/pull/20411) fix(dashboard): new created chart did not have high lighted effect when using the permalink of chart share in dashboard (@diegomedina248)
+- [#20261](https://github.com/apache/superset/pull/20261) fix(embedded): CSV download for chart (@lilykuang)
+- [#20276](https://github.com/apache/superset/pull/20276) fix(cosmetic): cannot find m-r-10 class in superset.less (@Renderz)
+- [#20420](https://github.com/apache/superset/pull/20420) fix: rm eslint-plugin-translation-vars engines requirement (@stephenLYZ)
+- [#20409](https://github.com/apache/superset/pull/20409) fix(bar-chart-v2): remove marker control from bar chart V2 (@stephenLYZ)
+- [#20333](https://github.com/apache/superset/pull/20333) fix(presto): use milliseconds timespec for presto (@mohittt8)
+- [#20414](https://github.com/apache/superset/pull/20414) fix: key error on permalink fetch for old permalinks (@eschutho)
+- [#20410](https://github.com/apache/superset/pull/20410) fix: Adding extra metrics issue after chart configuration (@codemaster08240328)
+- [#20405](https://github.com/apache/superset/pull/20405) fix: Incorrect translations in Chinese in messages.po (@chuancyzhang)
+- [#20396](https://github.com/apache/superset/pull/20396) fix(plugin-chart-pivot-table): color weight of Conditional formatting metrics not work (@stephenLYZ)
+- [#20361](https://github.com/apache/superset/pull/20361) fix(fonts): Show the all the A's in our workspace correctly, not funky (@prosdev0107)
+- [#20383](https://github.com/apache/superset/pull/20383) fix: Unable to export multiple Dashboards with the same name (@diegomedina248)
+- [#20363](https://github.com/apache/superset/pull/20363) fix: A newly connected database doesn't appear in the databases list if user connected database using the 'plus' button (@diegomedina248)
+- [#20372](https://github.com/apache/superset/pull/20372) fix: update connection modal to use existing catalog (@pkdotson)
+- [#20368](https://github.com/apache/superset/pull/20368) fix(VERSIONED_EXPORTS): Ensure dashboards and charts adhere to the VERSIONED_EXPORTS feature flag (@john-bodley)
+- [#20351](https://github.com/apache/superset/pull/20351) fix: catch some potential errors on dual write (@eschutho)
+- [#20364](https://github.com/apache/superset/pull/20364) fix: query execution time is not fully displayed in bubble icon (@diegomedina248)
+- [#20365](https://github.com/apache/superset/pull/20365) fix: Fix typo in Error handling message (@codemaster08240328)
+- [#19967](https://github.com/apache/superset/pull/19967) fix: A newly connected database doesn't appear in the databases list if user connected database using the 'plus' button (@diegomedina248)
+- [#20348](https://github.com/apache/superset/pull/20348) fix(docker): Make Gunicorn Keepalive Adjustable (@mdeshmu)
+- [#19670](https://github.com/apache/superset/pull/19670) fix: Add serviceAccountName to celerybeat pods (@paulinjo)
+- [#20315](https://github.com/apache/superset/pull/20315) fix(chart): chart gets cut off on the dashboard (@stephenLYZ)
+- [#20324](https://github.com/apache/superset/pull/20324) fix: superset-ui/core coverage (@zhaoyongjie)
+- [#20282](https://github.com/apache/superset/pull/20282) fix(explore): Make that see more/see less works correctly with scrolling when error msg is long text. (@prosdev0107)
+- [#20296](https://github.com/apache/superset/pull/20296) fix: Alpha are unable to perform a second modification to a Dataset when in Explore (@hughhhh)
+- [#20290](https://github.com/apache/superset/pull/20290) fix: Faulty datetime parser regex (@reesercollins)
+- [#19761](https://github.com/apache/superset/pull/19761) fix(plugin-chart-echarts): [feature-parity] apply button of annotation layer doesn't work as expected (@stephenLYZ)
+- [#20263](https://github.com/apache/superset/pull/20263) fix(embedded): accessing variable response before initialization (@zhaorui2022)
+- [#20274](https://github.com/apache/superset/pull/20274) fix(codecov): improve core code coverage (@stephenLYZ)
+- [#20187](https://github.com/apache/superset/pull/20187) fix: Database import with cancel_query.. extra field (@codemaster08240328)
+- [#20237](https://github.com/apache/superset/pull/20237) fix(cosmetic): Fix Datasource Modal Out Of Box (@Renderz)
+- [#20058](https://github.com/apache/superset/pull/20058) fix: Support the Clipboard API in modern browsers (@diegomedina248)
+- [#20164](https://github.com/apache/superset/pull/20164) fix(sql lab): View result button is not showing consistently (@diegomedina248)
+- [#20171](https://github.com/apache/superset/pull/20171) fix(charts list): do not trigger ListViewError exception for anonymous user (@trepmag)
+- [#20178](https://github.com/apache/superset/pull/20178) fix: While exporting CSV , only the entries on first page are getting downloaded even when user is on other pages #17861 (@LahmerIlyas)
+- [#20204](https://github.com/apache/superset/pull/20204) fix: Fixes issue where results panel height was incorrect [sc-49045] (@eric-briscoe)
+- [#20235](https://github.com/apache/superset/pull/20235) fix: Box Plot Chart throws an error when the average (AVG) / SUM is being calculated on the Metrics (@diegomedina248)
+- [#20088](https://github.com/apache/superset/pull/20088) fix: datatype tracking issue on virtual dataset (@codemaster08240328)
+- [#20220](https://github.com/apache/superset/pull/20220) fix: dashbaord unable to refresh (@zhaoyongjie)
+- [#20228](https://github.com/apache/superset/pull/20228) fix: failed samples should throw exception (@zhaoyongjie)
+- [#20203](https://github.com/apache/superset/pull/20203) fix: move columns to datasource object for bootstrap data (@hughhhh)
+- [#20151](https://github.com/apache/superset/pull/20151) fix(csv): Ensure df_to_escaped_csv does not coerce integer columns to float (@john-bodley)
+- [#20221](https://github.com/apache/superset/pull/20221) fix(legacy-plugin-chart-sunburst): linear color scheme not work when secondary metric is provided (@stephenLYZ)
+- [#20223](https://github.com/apache/superset/pull/20223) fix(legacy-plugin-chart-sunburst): chart broken when secondary metric is removed (@stephenLYZ)
+- [#20147](https://github.com/apache/superset/pull/20147) fix(cosmetic): Limiting modal height (@rusackas)
+- [#20206](https://github.com/apache/superset/pull/20206) fix(sql lab): SQL Lab Compile Query Delay (@diegomedina248)
+- [#20201](https://github.com/apache/superset/pull/20201) fix: unable to set destroyOnClose on ModalTrigger (@zhaoyongjie)
+- [#20186](https://github.com/apache/superset/pull/20186) fix(db): make to allow to show/hide the password when only creating (@prosdev0107)
+- [#20127](https://github.com/apache/superset/pull/20127) fix(database): retrival of tables and views from schema for exasol backend (@Nicoretti)
+- [#19899](https://github.com/apache/superset/pull/19899) fix: always create parameter json field (@pkdotson)
+- [#20173](https://github.com/apache/superset/pull/20173) fix: avoid while cycle in computeMaxFontSize for big Number run forever when css rule applied (@diegomedina248)
+- [#20086](https://github.com/apache/superset/pull/20086) fix(css): transparent linear gradient not working in safari (@stephenLYZ)
+- [#19102](https://github.com/apache/superset/pull/19102) fix: string aggregation is incorrect in PivotTableV2 (@diegomedina248)
+- [#20011](https://github.com/apache/superset/pull/20011) fix(chart & heatmap): make to fix that y label is rendering out of bounds (@prosdev0107)
+- [#20142](https://github.com/apache/superset/pull/20142) fix(explore): handle null control sections (@villebro)
+- [#20128](https://github.com/apache/superset/pull/20128) fix: advanced data type API spec and permission name (@dpgaspar)
+- [#20107](https://github.com/apache/superset/pull/20107) fix(generic-chart-axes): set x-axis if unset and ff is enabled (@villebro)
+- [#20018](https://github.com/apache/superset/pull/20018) fix(modal): add primary button loading state to modals (@kgopal492)
+- [#20099](https://github.com/apache/superset/pull/20099) fix: Add cypress test for report page direct link issue (@codemaster08240328)
+- [#20068](https://github.com/apache/superset/pull/20068) fix: dbmodal test connection error timeout (@pkdotson)
+- [#20092](https://github.com/apache/superset/pull/20092) fix: Revert "feat(explore): Show confirmation modal if user exits Explore without saving changes (#19993) (@kgabryje)
+- [#19939](https://github.com/apache/superset/pull/19939) fix(chart & alert): make to show metrics properly (@prosdev0107)
+- [#20085](https://github.com/apache/superset/pull/20085) fix: typo in `importexport/api.py` OpenAPI (@betodealmeida)
+- [#20051](https://github.com/apache/superset/pull/20051) fix(CRUD): make to fix the dancing when crud view is on hover (@prosdev0107)
+- [#20064](https://github.com/apache/superset/pull/20064) fix(chart & gallery): make to add mixed time-series into recommended charts (@prosdev0107)
+- [#20013](https://github.com/apache/superset/pull/20013) fix: The dynamic form to connect to Snowflake DB is not returning any errors (@diegomedina248)
+- [#20029](https://github.com/apache/superset/pull/20029) fix(plugin-chart-echarts): tooltip of big number truncated at then bottom (@stephenLYZ)
+- [#19914](https://github.com/apache/superset/pull/19914) fix: Refactor SQL engine username logic (@john-bodley)
+- [#20050](https://github.com/apache/superset/pull/20050) fix: Fixes Tabs style (@michael-s-molina)
+- [#20048](https://github.com/apache/superset/pull/20048) fix(homepage): make to show indicator when tab is chosen (@prosdev0107)
+- [#20026](https://github.com/apache/superset/pull/20026) fix(chart & filters): make to padding between textarea and buttons (@prosdev0107)
+- [#20019](https://github.com/apache/superset/pull/20019) fix(embedded): third party cookies (@lilykuang)
+- [#20033](https://github.com/apache/superset/pull/20033) fix: Direct Linking issue on report list: 404 status code. (@codemaster08240328)
+- [#19977](https://github.com/apache/superset/pull/19977) fix(word-cloud): fix randomness of each word's rotation (@ebaratte)
+- [#20021](https://github.com/apache/superset/pull/20021) fix: native filter truncation rerendering loop on hover (@diegomedina248)
+- [#20004](https://github.com/apache/superset/pull/20004) fix: URI form is blank when trying to connect from sql lab (@diegomedina248)
+- [#19841](https://github.com/apache/superset/pull/19841) fix: Table chart column config issue (@codemaster08240328)
+- [#19877](https://github.com/apache/superset/pull/19877) fix: Making chart update more truthful (@Gwitchr)
+- [#19996](https://github.com/apache/superset/pull/19996) fix: Use pull_request_target in Cypress Applitools workflow (@geido)
+- [#19972](https://github.com/apache/superset/pull/19972) fix: revert chore(deps): bump d3-svg-legend in /superset-frontend (#19846) (@villebro)
+- [#19889](https://github.com/apache/superset/pull/19889) fix: Fix auto-reversion of label/title in the Metrics popover (@diegomedina248)
+- [#19903](https://github.com/apache/superset/pull/19903) fix(explore): Explore data table tooltip (@Gwitchr)
+- [#19938](https://github.com/apache/superset/pull/19938) fix(chart & table): make to allow highlight in case of numeric column (@prosdev0107)
+- [#19839](https://github.com/apache/superset/pull/19839) fix(dashboard): allow users to resize the markdown widget easier (@cccs-Dustin)
+- [#19887](https://github.com/apache/superset/pull/19887) fix(hive): Workaround for Python 3.9 s3 transfer issue (@john-bodley)
+- [#19936](https://github.com/apache/superset/pull/19936) fix: OpenAPI docs small fixes (@dpgaspar)
+- [#19932](https://github.com/apache/superset/pull/19932) fix: can not correctly set force in store (@zhaoyongjie)
+- [#19930](https://github.com/apache/superset/pull/19930) fix: memoize primitives (@betodealmeida)
+- [#19926](https://github.com/apache/superset/pull/19926) fix(dataset): DAO update (@betodealmeida)
+- [#19826](https://github.com/apache/superset/pull/19826) fix: Missing `f` prefix on f-strings (@code-review-doctor)
+- [#18988](https://github.com/apache/superset/pull/18988) fix(column-header-tooltip): make that hide the tooltip when the cloum… (@prosdev0107)
+- [#19782](https://github.com/apache/superset/pull/19782) fix: chart import error with virtual dataset (@codemaster08240328)
+- [#19485](https://github.com/apache/superset/pull/19485) fix: Set fixed maxWidth of the cron schedule modal (@codemaster08240328)
+- [#19885](https://github.com/apache/superset/pull/19885) fix: Chart download as image issue (@codemaster08240328)
+- [#19883](https://github.com/apache/superset/pull/19883) fix(allow-db-explore): make to check the allow virtual table explore option by default (@prosdev0107)
+- [#19835](https://github.com/apache/superset/pull/19835) fix(helm): fix postgresql values (@benjamin-texier)
+- [#19758](https://github.com/apache/superset/pull/19758) fix(plugin-chart-echarts): [feature parity] annotation line chart color does not work (@stephenLYZ)
+- [#19879](https://github.com/apache/superset/pull/19879) fix(plugin-chart-handlebars): fix overflow, debounce and control reset (@villebro)
+- [#19668](https://github.com/apache/superset/pull/19668) fix: Dates alignment in Table viz (@geido)
+- [#19876](https://github.com/apache/superset/pull/19876) fix: Cannot re-order metrics by drag and drop (@diegomedina248)
+- [#19840](https://github.com/apache/superset/pull/19840) fix(dashboard-css): make to load saved css template (@prosdev0107)
+- [#19859](https://github.com/apache/superset/pull/19859) fix: Dashboard report creation error handling (@etr2460)
+- [#19857](https://github.com/apache/superset/pull/19857) fix: Update eslint error message to reflect location of antd components (@etr2460)
+- [#19605](https://github.com/apache/superset/pull/19605) fix: Query execution time is displayed as invalid date (@diegomedina248)
+- [#19694](https://github.com/apache/superset/pull/19694) fix(db & connection): make to show/hide the password when only creating db connection (@prosdev0107)
+- [#19778](https://github.com/apache/superset/pull/19778) fix: deck.gl GeoJsonLayer Autozoom & fill/stroke options (@diegomedina248)
+- [#19850](https://github.com/apache/superset/pull/19850) fix: Regression on Data and Alerts & Reports Headers (@diegomedina248)
+- [#19842](https://github.com/apache/superset/pull/19842) fix: count(distinct column_name) in metrics (@zhaoyongjie)
+- [#19843](https://github.com/apache/superset/pull/19843) fix(explore): ignore temporary controls in altered pill (@villebro)
+- [#19800](https://github.com/apache/superset/pull/19800) fix: Cypress tests reliability improvements (@diegomedina248)
+- [#19575](https://github.com/apache/superset/pull/19575) fix: Show full long number in text email report for table chart. (@codemaster08240328)
+- [#19429](https://github.com/apache/superset/pull/19429) fix(dashboard): make to filter the correct certified or non-certified… (@prosdev0107)
+- [#13082](https://github.com/apache/superset/pull/13082) fix(sql_lab): Add custom timestamp type for literal casting for presto timestamps (@kekwan)
+- [#19797](https://github.com/apache/superset/pull/19797) fix: add missing init files (@suddjian)
+- [#19672](https://github.com/apache/superset/pull/19672) fix: trap SQLAlchemy common exceptions & throw 422 error instead (@diegomedina248)
+- [#19288](https://github.com/apache/superset/pull/19288) fix: AlertReportCronScheduler tests (@diegomedina248)
+- [#19781](https://github.com/apache/superset/pull/19781) fix(world-map): remove categorical color control (@serenajiang)
+- [#19792](https://github.com/apache/superset/pull/19792) fix(plugin-chart-table): Resetting controls when switching query mode (@kgabryje)
+- [#19755](https://github.com/apache/superset/pull/19755) fix: small cleanup for created by me dashboards API (@dpgaspar)
+- [#19784](https://github.com/apache/superset/pull/19784) fix(readme): Remove broken link to legacy gallery (@drluckyspin)
+- [#19722](https://github.com/apache/superset/pull/19722) fix: dashboard top level tabs edit (@diegomedina248)
+- [#19777](https://github.com/apache/superset/pull/19777) fix(explore): Double divider if no permissions for adding reports (@kgabryje)
+- [#19673](https://github.com/apache/superset/pull/19673) fix(import): Add the error alert on failed database import (@prosdev0107)
+- [#19518](https://github.com/apache/superset/pull/19518) fix: alert/report created by filter inconsistency with table display (@diegomedina248)
+- [#19700](https://github.com/apache/superset/pull/19700) fix: remove expose (@AAfghahi)
+- [#19626](https://github.com/apache/superset/pull/19626) fix: deactivate embedding on a dashboard (@suddjian)
+- [#19472](https://github.com/apache/superset/pull/19472) fix: Dashboard Edit View Tab Headers Hidden when Dashboard Name is Long (@diegomedina248)
+- [#19311](https://github.com/apache/superset/pull/19311) fix(sql lab): add quotes when autocompleting table names with spaces in the editor (@diegomedina248)
+- [#19290](https://github.com/apache/superset/pull/19290) fix(sql lab): select edit on query from history doesn't upload editor properly (@diegomedina248)
+- [#19420](https://github.com/apache/superset/pull/19420) fix: sql lab ctrl t behaved differently from clicking (@Gwitchr)
+- [#19357](https://github.com/apache/superset/pull/19357) fix: Redirect to full url on 401 (@geido)
+- [#19001](https://github.com/apache/superset/pull/19001) fix: Line Chart Annotation Info Update (@codemaster08240328)
+- [#19714](https://github.com/apache/superset/pull/19714) fix: create virtual table with exotic type (@villebro)
+- [#19708](https://github.com/apache/superset/pull/19708) fix(nav): infinite redirect and upload dataset nav permissions (@ktmud)
+- [#19430](https://github.com/apache/superset/pull/19430) fix(data-upload): make to change err message (@prosdev0107)
+- [#19419](https://github.com/apache/superset/pull/19419) fix(alert & report): make to fix the issue when recreate report (@prosdev0107)
+- [#19371](https://github.com/apache/superset/pull/19371) fix: Reset sorting bar issue in Barchart (@codemaster08240328)
+- [#19362](https://github.com/apache/superset/pull/19362) fix(sql lab): display the 'View Results' button consistently in the history tab on sync mode (@diegomedina248)
+- [#19294](https://github.com/apache/superset/pull/19294) fix: improve alerts & reports modal on small devices (@diegomedina248)
+- [#19257](https://github.com/apache/superset/pull/19257) fix(sql lab): table selector should display all the selected tables (@diegomedina248)
+- [#19686](https://github.com/apache/superset/pull/19686) fix(plugin-chart-echarts): xAxis scale is not correct when time grain is quarter (@stephenLYZ)
+- [#19646](https://github.com/apache/superset/pull/19646) fix(explore): Change copy of cross filters checkbox (@kgabryje)
+- [#19586](https://github.com/apache/superset/pull/19586) fix: Navbar styles and Welcome page text (@geido)
+- [#19662](https://github.com/apache/superset/pull/19662) fix(database-api): allow search for all columns (@villebro)
+- [#19656](https://github.com/apache/superset/pull/19656) fix: allow_browser_login in import/export API (@betodealmeida)
+- [#19628](https://github.com/apache/superset/pull/19628) fix: Table Autosizing Has Unnecessary Horizontal Scroll Bars (@diegomedina248)
+- [#19573](https://github.com/apache/superset/pull/19573) fix(chart & polygon): make to fix the issue the polygon chart (@prosdev0107)
+- [#19051](https://github.com/apache/superset/pull/19051) fix: update Permissions for right nav (@AAfghahi)
+- [#19625](https://github.com/apache/superset/pull/19625) fix(test): make test_clean_requests_after_schema_grant more idempotent (@ktmud)
+- [#19571](https://github.com/apache/superset/pull/19571) fix: Catch literal colors when theme top level (@geido)
+- [#19594](https://github.com/apache/superset/pull/19594) fix: spelling of following (@lzm0)
+- [#19569](https://github.com/apache/superset/pull/19569) fix: check type of url before performing string actions (@eschutho)
+- [#19570](https://github.com/apache/superset/pull/19570) fix: sqloxide optional (@betodealmeida)
+- [#19397](https://github.com/apache/superset/pull/19397) fix: weight tooltip issue (@codemaster08240328)
+- [#19313](https://github.com/apache/superset/pull/19313) fix(sql lab): increase the size of the action icons in the history tab (@diegomedina248)
+- [#19039](https://github.com/apache/superset/pull/19039) fix(explore): clean data when hidding control (@stephenLYZ)
+- [#19444](https://github.com/apache/superset/pull/19444) fix: Error Message is cut off in alerts & reports log page (@codemaster08240328)
+- [#19312](https://github.com/apache/superset/pull/19312) fix: adaptive formatting typo in explore dropdowns (@diegomedina248)
+- [#19534](https://github.com/apache/superset/pull/19534) fix(explore): Chart header icon paddings (@kgabryje)
+- [#19399](https://github.com/apache/superset/pull/19399) fix: native filter dropdown not attached to parent node (@diegomedina248)
+- [#19112](https://github.com/apache/superset/pull/19112) fix: Dashboard import holding issue (@codemaster08240328)
+- [#19342](https://github.com/apache/superset/pull/19342) fix: Clean up custom css when dashboard unmounted (@codemaster08240328)
+- [#19491](https://github.com/apache/superset/pull/19491) fix: Dynamic form to connect to Snowflake DB is not displaying authentication errors (@diegomedina248)
+- [#19528](https://github.com/apache/superset/pull/19528) fix: Correct Ukraine map (@wacken89)
+- [#19522](https://github.com/apache/superset/pull/19522) fix: add back view for report reload error (@pkdotson)
+- [#19519](https://github.com/apache/superset/pull/19519) fix: GSheets rendering from global nav (@hughhhh)
+- [#19358](https://github.com/apache/superset/pull/19358) fix(sqllab): make to hide the delete button of most recent query history (@prosdev0107)
+- [#19307](https://github.com/apache/superset/pull/19307) fix: Logo resizing on page load (@geido)
+- [#19166](https://github.com/apache/superset/pull/19166) fix: time filter should be [start, end) (@zhaoyongjie)
+
+**Others**
+- [#20116](https://github.com/apache/superset/pull/20116) style(typo): occured -> occurred (@sfirke)
+- [#20401](https://github.com/apache/superset/pull/20401) chore: add action to welcome new users (@eschutho)
+- [#20269](https://github.com/apache/superset/pull/20269) chore(docs): Remove cache warming documentation (@ajwhite)
+- [#20194](https://github.com/apache/superset/pull/20194) chore: Removes unused vars (@michael-s-molina)
+- [#20321](https://github.com/apache/superset/pull/20321) chore: add breaking change information about form_data datasource_type (@eschutho)
+- [#20298](https://github.com/apache/superset/pull/20298) chore: Removes no-use-before-define warnings (@michael-s-molina)
+- [#20337](https://github.com/apache/superset/pull/20337) chore(dashboard): update Edit Dashboard side panel tabs (@codyml)
+- [#20318](https://github.com/apache/superset/pull/20318) chore: Updates the final steps of the release README (@michael-s-molina)
+- [#20307](https://github.com/apache/superset/pull/20307) docs: Updates CHANGELOG.md with 1.5.1 fixes (@michael-s-molina)
+- [#20308](https://github.com/apache/superset/pull/20308) docs(jinja): Detail how to use Jinja parameters (@EBoisseauSierra)
+- [#20304](https://github.com/apache/superset/pull/20304) chore: superset-ui/core code coverage (@zhaoyongjie)
+- [#20297](https://github.com/apache/superset/pull/20297) chore(deps): pinning pyjwt to 2.4.0 (@sadpandajoe)
+- [#20287](https://github.com/apache/superset/pull/20287) chore(deps): bump numpy 1.22.1 and PyJWT to 2.4.0 (@sadpandajoe)
+- [#20272](https://github.com/apache/superset/pull/20272) chore: remove unused codes for samples (@zhaoyongjie)
+- [#20289](https://github.com/apache/superset/pull/20289) chore: Adjusts release emails (@michael-s-molina)
+- [#20180](https://github.com/apache/superset/pull/20180) docs: facelift the docs (@mistercrunch)
+- [#20249](https://github.com/apache/superset/pull/20249) chore: add event logger to reports/alerts CRUD (@AAfghahi)
+- [#20273](https://github.com/apache/superset/pull/20273) chore: adjust the psycopg2 version of k8s installation guide (@ensky)
+- [#20152](https://github.com/apache/superset/pull/20152) refactor(trino): Handful of updates for the Trino engine (@john-bodley)
+- [#20252](https://github.com/apache/superset/pull/20252) chore: use exc_info to pass errors to log warnings (@eschutho)
+- [#20154](https://github.com/apache/superset/pull/20154) chore(requirements): Cleanup of Python requirements (@john-bodley)
+- [#20226](https://github.com/apache/superset/pull/20226) refactor: decouple DataTableControl (@zhaoyongjie)
+- [#20243](https://github.com/apache/superset/pull/20243) docs: Add beans to users list (@kakoni)
+- [#20231](https://github.com/apache/superset/pull/20231) docs: Updates release scripts and docs (@michael-s-molina)
+- [#20196](https://github.com/apache/superset/pull/20196) chore: bumping min version of shillelagh (@AAfghahi)
+- [#20192](https://github.com/apache/superset/pull/20192) chore: Moves date utils to utils folder (@michael-s-molina)
+- [#20210](https://github.com/apache/superset/pull/20210) docs: update release instructions (@villebro)
+- [#20205](https://github.com/apache/superset/pull/20205) chore(deps): bump swagger-ui-react from 4.1.2 to 4.1.3 in /docs (@dependabot[bot])
+- [#20195](https://github.com/apache/superset/pull/20195) docs: correct case of ClickHouse (@DanRoscigno)
+- [#20109](https://github.com/apache/superset/pull/20109) refactor: decouple DataTablesPane (@zhaoyongjie)
+- [#20193](https://github.com/apache/superset/pull/20193) refactor: Removes embedded/index.tsx warnings (@michael-s-molina)
+- [#20185](https://github.com/apache/superset/pull/20185) docs(security): a typo: Gamma should be in quotes (@jimmytheneutrino)
+- [#20146](https://github.com/apache/superset/pull/20146) chore: Implement global header in Dashboard (@geido)
+- [#20174](https://github.com/apache/superset/pull/20174) chore: Disable flaky assert in reports cypress test (@kgabryje)
+- [#20163](https://github.com/apache/superset/pull/20163) chore: change button name in Sql Lab (@AAfghahi)
+- [#20157](https://github.com/apache/superset/pull/20157) chore: filter undefined operators (@zhaoyongjie)
+- [#20140](https://github.com/apache/superset/pull/20140) chore(data-table): make formatted dttm the default (@villebro)
+- [#20104](https://github.com/apache/superset/pull/20104) chore: fix INTHEWILD sort order and indentation (@villebro)
+- [#20093](https://github.com/apache/superset/pull/20093) chore: Add the tnum font property to Table components (@geido)
+- [#20103](https://github.com/apache/superset/pull/20103) docs: Update INTHEWILD.md (@fccoelho)
+- [#20102](https://github.com/apache/superset/pull/20102) chore: Update aiohttp to 3.8.1 (@diegomedina248)
+- [#20066](https://github.com/apache/superset/pull/20066) chore: Set limit for a query in execute_sql_statement (@AAfghahi)
+- [#20032](https://github.com/apache/superset/pull/20032) chore: Change copy to Edit chart in Dashboard dropdown (@geido)
+- [#20071](https://github.com/apache/superset/pull/20071) chore: Fix and enhance Applitools workflows (@geido)
+- [#19966](https://github.com/apache/superset/pull/19966) test: make tabbed dashboard a little more complex (@ktmud)
+- [#19976](https://github.com/apache/superset/pull/19976) perf(plugin-chart-table): Add memoization to avoid rerenders (@kgabryje)
+- [#20044](https://github.com/apache/superset/pull/20044) chore: Create a generic header component for Explore and Dashboard (@kgabryje)
+- [#20046](https://github.com/apache/superset/pull/20046) docs: add changelog and updating entries for 1.5.0 (@villebro)
+- [#19962](https://github.com/apache/superset/pull/19962) chore: add doc link for db migration conflict warning (@ktmud)
+- [#20034](https://github.com/apache/superset/pull/20034) chore: Changes the no-literal-colors lint rule to throw errors instead of warnings (@michael-s-molina)
+- [#20031](https://github.com/apache/superset/pull/20031) chore: Run Applitools + Cypress nightly (@geido)
+- [#20006](https://github.com/apache/superset/pull/20006) chore: Removes hard-coded colors from the plugins - iteration 2 (@michael-s-molina)
+- [#19130](https://github.com/apache/superset/pull/19130) refactor: Refactor reports for Charts and Dashboards (@AAfghahi)
+- [#20016](https://github.com/apache/superset/pull/20016) chore: Removes hard-coded colors - iteration 3 (@michael-s-molina)
+- [#19870](https://github.com/apache/superset/pull/19870) docs: Detail front-end development instructions (@EBoisseauSierra)
+- [#19971](https://github.com/apache/superset/pull/19971) docs: Add config for running on a WSGI HTTP server (@thinhnd2104)
+- [#20008](https://github.com/apache/superset/pull/20008) chore: Upgrades Storybook from 6.4.19 to 6.4.22 (@michael-s-molina)
+- [#20009](https://github.com/apache/superset/pull/20009) docs: typo in chart-params markdown file (@JakobMiksch)
+- [#19923](https://github.com/apache/superset/pull/19923) chore: Removes hard-coded colors from the plugins - iteration 1 (@michael-s-molina)
+- [#19954](https://github.com/apache/superset/pull/19954) chore: convert URLShortLinkButton to typescript (@ktmud)
+- [#19929](https://github.com/apache/superset/pull/19929) chore: change subject name from no_name to named for PNGs in (@AAfghahi)
+- [#19942](https://github.com/apache/superset/pull/19942) refactor(ReportModal): simplify state reducer and improve error handling (@ktmud)
+- [#19770](https://github.com/apache/superset/pull/19770) chore: remove druid datasource from the config (@eschutho)
+- [#19911](https://github.com/apache/superset/pull/19911) chore: Fix broken link for DouroECI (@mavimo)
+- [#19951](https://github.com/apache/superset/pull/19951) chore: Adds the theme object to chart properties (@michael-s-molina)
+- [#19813](https://github.com/apache/superset/pull/19813) chore: get embedded user with roles and permissions (@suddjian)
+- [#19897](https://github.com/apache/superset/pull/19897) chore: Adds a storybook to FilterableTable (@michael-s-molina)
+- [#19924](https://github.com/apache/superset/pull/19924) chore(reports): Improving logging around failed scheduled reports (@craig-rueda)
+- [#19906](https://github.com/apache/superset/pull/19906) revert: "fix(sql lab): display the 'View Results' button consistently in the history tab on sync mode" (@Gwitchr)
+- [#19916](https://github.com/apache/superset/pull/19916) chore(deps): bump react-virtualized-auto-sizer from 1.0.2 to 1.0.6 in /superset-frontend (@dependabot[bot])
+- [#19888](https://github.com/apache/superset/pull/19888) chore(deps): bump cross-fetch from 3.1.4 to 3.1.5 in /docs (@dependabot[bot])
+- [#19894](https://github.com/apache/superset/pull/19894) chore(deps-dev): bump eslint-plugin-prettier from 3.3.1 to 4.0.0 in /superset-frontend (@dependabot[bot])
+- [#19602](https://github.com/apache/superset/pull/19602) docs: Added gtag to docusaurus (@AAfghahi)
+- [#19878](https://github.com/apache/superset/pull/19878) chore(deps-dev): bump @storybook/client-api from 6.4.19 to 6.4.22 in /superset-frontend (@dependabot[bot])
+- [#19821](https://github.com/apache/superset/pull/19821) test(native filter): refactor and add new test (@jinghua-qa)
+- [#19613](https://github.com/apache/superset/pull/19613) chore: Update line-height in SliceHeaderControl (@geido)
+- [#19616](https://github.com/apache/superset/pull/19616) chore: Update font-sizes in DatabaseModal (@geido)
+- [#19866](https://github.com/apache/superset/pull/19866) chore: fix explore pills (@villebro)
+- [#19872](https://github.com/apache/superset/pull/19872) chore: Update aiohttp>=3.7.4 in requirements (@hughhhh)
+- [#19874](https://github.com/apache/superset/pull/19874) chore: bump rockset>=0.8.10, <0.9 (@hughhhh)
+- [#19864](https://github.com/apache/superset/pull/19864) chore(deps): bump react-syntax-highlighter from 15.4.5 to 15.5.0 in /superset-frontend (@dependabot[bot])
+- [#19828](https://github.com/apache/superset/pull/19828) chore: add custom eslint plugin to prevent translation variables (@stephenLYZ)
+- [#19845](https://github.com/apache/superset/pull/19845) chore(deps): bump react-split from 2.0.9 to 2.0.14 in /superset-frontend (@dependabot[bot])
+- [#19846](https://github.com/apache/superset/pull/19846) chore(deps): bump d3-svg-legend from 1.13.0 to 2.25.6 in /superset-frontend (@dependabot[bot])
+- [#19847](https://github.com/apache/superset/pull/19847) chore(deps-dev): bump eslint-plugin-jsx-a11y from 6.4.1 to 6.5.1 in /superset-frontend (@dependabot[bot])
+- [#19853](https://github.com/apache/superset/pull/19853) chore(frontend-tests): Spelling (@jsoref)
+- [#19823](https://github.com/apache/superset/pull/19823) docs: updated links for country map scripts (@ktmud)
+- [#19829](https://github.com/apache/superset/pull/19829) chore(deps-dev): bump babel-loader from 8.2.4 to 8.2.5 in /superset-frontend (@dependabot[bot])
+- [#19830](https://github.com/apache/superset/pull/19830) chore(deps): bump react-hot-loader from 4.12.20 to 4.13.0 in /superset-frontend (@dependabot[bot])
+- [#19403](https://github.com/apache/superset/pull/19403) chore(deps-dev): bump babel-loader from 8.2.2 to 8.2.4 in /superset-frontend (@dependabot[bot])
+- [#19637](https://github.com/apache/superset/pull/19637) chore(deps): bump moment from 2.29.1 to 2.29.2 in /superset-frontend (@dependabot[bot])
+- [#19681](https://github.com/apache/superset/pull/19681) chore(deps): bump async from 3.2.0 to 3.2.3 in /superset-frontend/cypress-base (@dependabot[bot])
+- [#19680](https://github.com/apache/superset/pull/19680) chore(deps): bump async from 3.2.0 to 3.2.3 in /superset-websocket (@dependabot[bot])
+- [#19020](https://github.com/apache/superset/pull/19020) chore(deps): bump url-parse from 1.5.7 to 1.5.10 in /superset-frontend (@dependabot[bot])
+- [#17978](https://github.com/apache/superset/pull/17978) chore(deps): bump @types/d3-time from 1.1.1 to 3.0.0 in /superset-frontend (@dependabot[bot])
+- [#19727](https://github.com/apache/superset/pull/19727) chore(deps): bump async from 2.6.3 to 2.6.4 in /docs (@dependabot[bot])
+- [#19551](https://github.com/apache/superset/pull/19551) chore(deps): bump minimist from 1.2.5 to 1.2.6 in /superset-websocket (@dependabot[bot])
+- [#19165](https://github.com/apache/superset/pull/19165) chore: simplify error messaging in database modal (@pkdotson)
+- [#19790](https://github.com/apache/superset/pull/19790) chore: bump postgres from 10 to 14 (@dpgaspar)
+- [#19480](https://github.com/apache/superset/pull/19480) chore: Update UPDATING.md (@john-bodley)
+- [#19740](https://github.com/apache/superset/pull/19740) chore: fix grammar error (@zhaoyongjie)
+- [#19703](https://github.com/apache/superset/pull/19703) chore(build): upgrade less-loader (@ktmud)
+- [#19736](https://github.com/apache/superset/pull/19736) chore: Updates the Select code owners (@michael-s-molina)
+- [#19715](https://github.com/apache/superset/pull/19715) docs(install): ubuntu default-libmysqlclient-dev (@cemremengu)
+- [#19726](https://github.com/apache/superset/pull/19726) chore: bumping shillelagh (@AAfghahi)
+- [#19699](https://github.com/apache/superset/pull/19699) chore: fix typo (@betodealmeida)
+- [#19674](https://github.com/apache/superset/pull/19674) chore: upgrade Pillow (@betodealmeida)
+- [#19647](https://github.com/apache/superset/pull/19647) chore(explore): Change labels "Group by"/"Series" to "Dimensions" (@kgabryje)
+- [#19679](https://github.com/apache/superset/pull/19679) chore(deps): bump urijs from 1.19.8 to 1.19.11 in /superset-frontend (@dependabot[bot])
+- [#19638](https://github.com/apache/superset/pull/19638) chore(deps): bump moment from 2.29.1 to 2.29.2 in /docs (@dependabot[bot])
+- [#19617](https://github.com/apache/superset/pull/19617) chore: updated two github issue templates (@srinify)
+- [#19666](https://github.com/apache/superset/pull/19666) chore: Remove TwoTone icons (@geido)
+- [#19614](https://github.com/apache/superset/pull/19614) chore: Remove wrong usage of font-size in ExploreViewContainer (@geido)
+- [#19593](https://github.com/apache/superset/pull/19593) chore: Update font-sizes in ReportModal (@geido)
+- [#19611](https://github.com/apache/superset/pull/19611) chore: Update font-sizes in ImportModal (@geido)
+- [#19615](https://github.com/apache/superset/pull/19615) chore: Update font-sizes in AlertReportModal (@geido)
+- [#19620](https://github.com/apache/superset/pull/19620) chore: Update font-sizes in QueryPreviewModal (@geido)
+- [#19641](https://github.com/apache/superset/pull/19641) chore: clean up dynamic translation strings (@villebro)
+- [#19635](https://github.com/apache/superset/pull/19635) refactor: consistent migration tests organization (@ktmud)
+- [#19634](https://github.com/apache/superset/pull/19634) test: freeze time for dashboard export test (@ktmud)
+- [#19606](https://github.com/apache/superset/pull/19606) test(jinja): refactor to functional tests (@villebro)
+- [#19587](https://github.com/apache/superset/pull/19587) chore: cleanup as unknown conversion (@zhaoyongjie)
+- [#19562](https://github.com/apache/superset/pull/19562) refactor: Removes the CSS files from the Horizon plugin (@michael-s-molina)
+- [#19563](https://github.com/apache/superset/pull/19563) refactor: Removes the CSS files from the Paired T-Test plugin (@michael-s-molina)
+- [#19539](https://github.com/apache/superset/pull/19539) refactor: Removes the CSS files from the Parallel Coordinates plugin (@michael-s-molina)
+- [#19521](https://github.com/apache/superset/pull/19521) refactor: Removes the CSS files from the Partition plugin (@michael-s-molina)
+- [#19493](https://github.com/apache/superset/pull/19493) chore: Removes hard-coded colors from legacy-plugin-chart-sankey (@michael-s-molina)
+- [#19462](https://github.com/apache/superset/pull/19462) chore: Remove FilterBox.less (@geido)
+- [#19438](https://github.com/apache/superset/pull/19438) chore: Remove crud.less from Datasource (@geido)
+- [#19517](https://github.com/apache/superset/pull/19517) chore: Enhance ReactChord style with theme vars (@geido)
+- [#19463](https://github.com/apache/superset/pull/19463) chore: Remove TimeTable.less (@geido)
+- [#19550](https://github.com/apache/superset/pull/19550) chore(deps): bump minimist from 1.2.5 to 1.2.6 in /superset-embedded-sdk (@dependabot[bot])
+- [#19566](https://github.com/apache/superset/pull/19566) chore(deps): bump node-forge from 1.2.1 to 1.3.1 in /docs (@dependabot[bot])
+- [#19552](https://github.com/apache/superset/pull/19552) chore(deps): bump minimist from 1.2.5 to 1.2.6 in /docs (@dependabot[bot])
+- [#19549](https://github.com/apache/superset/pull/19549) chore(deps): bump minimist from 1.2.5 to 1.2.6 in /superset-frontend/cypress-base (@dependabot[bot])
+- [#19559](https://github.com/apache/superset/pull/19559) docs: update the typo in the documentation (@fatosmorina)
+- [#19538](https://github.com/apache/superset/pull/19538) refactor: Removes the CSS files from the Country Map plugin (@michael-s-molina)
+- [#19536](https://github.com/apache/superset/pull/19536) chore: Removes hard-coded opacity and spacing from the BigNumber plugin (@michael-s-molina)
+- [#19494](https://github.com/apache/superset/pull/19494) refactor: Removes the CSS files from the Sankey Loop plugin (@michael-s-molina)
+- [#19492](https://github.com/apache/superset/pull/19492) chore: Remove Legacy Force Directed viz plugin (@geido)
+- [#19524](https://github.com/apache/superset/pull/19524) chore: Deprecating /my_queries endpoint (@AAfghahi)
+- [#19467](https://github.com/apache/superset/pull/19467) chore(Explore): Change text when saving a chart in a new dashboard (@geido)
+- [#19526](https://github.com/apache/superset/pull/19526) chore(database): Creating helper make_url_safe to wrap potential errors (@craig-rueda)
+- [#19415](https://github.com/apache/superset/pull/19415) chore: Remove Control.less in Explore (@geido)
+- [#19413](https://github.com/apache/superset/pull/19413) chore: Remove unused less file from profile (@geido)
+- [#19460](https://github.com/apache/superset/pull/19460) chore: Switch to gender neutral terms (@inclusive-coding-bot)
+- [#19486](https://github.com/apache/superset/pull/19486) refactor: Removes the CSS files from the Treemap plugin (@michael-s-molina)
+- [#19488](https://github.com/apache/superset/pull/19488) refactor: Removes the CSS files from the Sunburst plugin (@michael-s-molina)
+- [#19490](https://github.com/apache/superset/pull/19490) chore: Add theme color to ParallelCoordinates (@geido)
+- [#19442](https://github.com/apache/superset/pull/19442) chore: Remove FilterbaleTableStyles.less (@geido)
+- [#19441](https://github.com/apache/superset/pull/19441) chore: Remove StyledQueryButton.less (@geido)
+- [#19473](https://github.com/apache/superset/pull/19473) refactor: Removes the CSS files from the Rose plugin (@michael-s-molina)
+- [#19466](https://github.com/apache/superset/pull/19466) chore: Removes hard-coded colors from legacy-plugin-chart-world-map (@michael-s-molina)
+- [#19465](https://github.com/apache/superset/pull/19465) refactor: Removes the CSS files from the DeckGL plugin (@michael-s-molina)
+- [#19440](https://github.com/apache/superset/pull/19440) chore: Remove index.less from showSavedQuery (@geido)
+- [#19230](https://github.com/apache/superset/pull/19230) chore!: remove `ROW_LEVEL_SECURITY` feature flag (permanently enable) (@suddjian)
+- [#19361](https://github.com/apache/superset/pull/19361) chore: remove deprecated config keys and endpoints code 2.0 (@pkdotson)
+- [#19261](https://github.com/apache/superset/pull/19261) chore: remove old alerts and configs keys (@pkdotson)
+- [#19168](https://github.com/apache/superset/pull/19168) chore: bump celery and Flask (@dpgaspar)
+- [#19049](https://github.com/apache/superset/pull/19049) chore: Remove logo forced width (@geido)
+- [#19274](https://github.com/apache/superset/pull/19274) chore: remove PUBLIC_ROLE_LIKE_GAMMA deprecated config key (@dpgaspar)
+- [#19273](https://github.com/apache/superset/pull/19273) chore: remove deprecated celery cli (@dpgaspar)
+- [#19262](https://github.com/apache/superset/pull/19262) chore: update updating with druid no sql deprecation (@eschutho)
+- [#19083](https://github.com/apache/superset/pull/19083) chore!: update mutator to take kwargs (@eschutho)
+- [#19231](https://github.com/apache/superset/pull/19231) chore!: remove `ENABLE_REACT_CRUD_VIEWS` feature flag (permanently enable) (@suddjian)
+- [#19241](https://github.com/apache/superset/pull/19241) chore(superset 2.0): remove front-end deprecated code (@graceguo-supercat)
+- [#19107](https://github.com/apache/superset/pull/19107) chore: turn on SQLLAB_BACKEND_PERSISTENCE by default (@ktmud)
+- [#19142](https://github.com/apache/superset/pull/19142) chore!: turn on Versioned Export in config.py (@AAfghahi)
+- [#19108](https://github.com/apache/superset/pull/19108) chore: Update UPDATING.md with info about flipping dnd feature flag (@kgabryje)
+- [#19146](https://github.com/apache/superset/pull/19146) chore!: Remove remove SQLALCHEMY_DOCS_URL and SQLALCHEMY_DISPLAY_TEXT from the config from the config (@hughhhh)
+- [#19017](https://github.com/apache/superset/pull/19017) chore: Deprecate Python 3.7 (@john-bodley)
+- [#19113](https://github.com/apache/superset/pull/19113) chore(config): Migrating `ENABLE_JAVASCRIPT_CONTROLS` from app config to a feature flag (@rusackas)
+- [#19046](https://github.com/apache/superset/pull/19046) chore(explore): Set Drag&Drop feature flags to True by default (@kgabryje)
+- [#19016](https://github.com/apache/superset/pull/19016) chore: Adding PR to Updating.md (@AAfghahi)
+- [#18970](https://github.com/apache/superset/pull/18970) chore: Change Dataset legacy editor flag to true (@AAfghahi)
diff --git a/RELEASING/test_run_tarball.sh b/RELEASING/test_run_tarball.sh
index 112adc8cffac..d4c8a9c706a0 100755
--- a/RELEASING/test_run_tarball.sh
+++ b/RELEASING/test_run_tarball.sh
@@ -26,7 +26,7 @@ if [ -z "${SUPERSET_SVN_DEV_PATH}" ]; then
SUPERSET_SVN_DEV_PATH="$HOME/svn/superset_dev"
fi
-if [ ${1} == "local" ]; then
+if [[ -n ${1} ]] && [[ ${1} == "local" ]]; then
SUPERSET_RELEASE_RC=apache-superset-"${SUPERSET_VERSION_RC}"
SUPERSET_RELEASE_RC_TARBALL="${SUPERSET_RELEASE_RC}"-source.tar.gz
SUPERSET_TARBALL_PATH="${SUPERSET_SVN_DEV_PATH}"/${SUPERSET_VERSION_RC}/${SUPERSET_RELEASE_RC_TARBALL}
diff --git a/RESOURCES/FEATURE_FLAGS.md b/RESOURCES/FEATURE_FLAGS.md
index 26ac6bfde943..aa4d6c635565 100644
--- a/RESOURCES/FEATURE_FLAGS.md
+++ b/RESOURCES/FEATURE_FLAGS.md
@@ -16,49 +16,86 @@ KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
+
# Superset Feature Flags
+
This is a list of the current Superset optional features. See config.py for default values. These features can be turned on/off by setting your preferred values in superset_config.py to True/False respectively
## In Development
+
These features are considered **unfinished** and should only be used on development environments.
+[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
+
- CLIENT_CACHE
- DASHBOARD_CACHE
- DASHBOARD_NATIVE_FILTERS_SET
- DISABLE_DATASET_SOURCE_EDIT
+- DRILL_TO_DETAIL
+- ENABLE_ADVANCED_DATA_TYPES
- ENABLE_EXPLORE_JSON_CSRF_PROTECTION
+- ENABLE_TEMPLATE_REMOVE_FILTERS
+- HORIZONTAL_FILTER_BAR
- KV_STORE
- PRESTO_EXPAND_DATA
- REMOVE_SLICE_LEVEL_LABEL_COLORS
- SHARE_QUERIES_VIA_KV_STORE
- TAGGING_SYSTEM
-- ENABLE_TEMPLATE_REMOVE_FILTERS
## In Testing
+
These features are **finished** but currently being tested. They are usable, but may still contain some bugs.
+[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
+
- ALERT_REPORTS: [(docs)](https://superset.apache.org/docs/installation/alerts-reports)
-- DYNAMIC_PLUGINS: [(docs)](https://superset.apache.org/docs/installation/running-on-kubernetes)
+- ALLOW_FULL_CSV_EXPORT
+- CACHE_IMPERSONATION
+- CONFIRM_DASHBOARD_DIFF
+- DASHBOARD_EDIT_CHART_IN_NEW_TAB
+- DASHBOARD_FILTERS_EXPERIMENTAL
- DASHBOARD_NATIVE_FILTERS
+- DYNAMIC_PLUGINS: [(docs)](https://superset.apache.org/docs/installation/running-on-kubernetes)
+- ENABLE_FILTER_BOX_MIGRATION
+- ENABLE_JAVASCRIPT_CONTROLS
+- GENERIC_CHART_AXES
- GLOBAL_ASYNC_QUERIES [(docs)](https://github.com/apache/superset/blob/master/CONTRIBUTING.md#async-chart-queries)
+- RLS_IN_SQLLAB
+- USE_ANALAGOUS_COLORS
+- UX_BETA
- VERSIONED_EXPORT
-- ENABLE_JAVASCRIPT_CONTROLS
## Stable
+
These features flags are **safe for production** and have been tested.
+[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
+
+- ALERTS_ATTACH_REPORTS
+- ALLOW_ADHOC_SUBQUERY
- DASHBOARD_CROSS_FILTERS
- DASHBOARD_RBAC [(docs)](https://superset.apache.org/docs/creating-charts-dashboards/first-dashboard#manage-access-to-dashboards)
-- ESCAPE_MARKDOWN_HTML
+- DISABLE_LEGACY_DATASOURCE_EDITOR
+- DRUID_JOINS
+- EMBEDDABLE_CHARTS
+- EMBEDDED_SUPERSET
+- ENABLE_DND_WITH_CLICK_UX
+- ENABLE_EXPLORE_DRAG_AND_DROP
- ENABLE_TEMPLATE_PROCESSING
+- ENFORCE_DB_ENCRYPTION_UI
+- ESCAPE_MARKDOWN_HTML
- LISTVIEWS_DEFAULT_CARD_VIEW
- SCHEDULED_QUERIES [(docs)](https://superset.apache.org/docs/installation/alerts-reports)
-- SQL_VALIDATORS_BY_ENGINE [(docs)](https://superset.apache.org/docs/installation/sql-templating)
- SQLLAB_BACKEND_PERSISTENCE
+- SQL_VALIDATORS_BY_ENGINE [(docs)](https://superset.apache.org/docs/installation/sql-templating)
- THUMBNAILS [(docs)](https://superset.apache.org/docs/installation/cache)
## Deprecated Flags
+
These features flags currently default to True and **will be removed in a future major release**. For this current release you can turn them off by setting your config to False, but it is advised to remove or set these flags in your local configuration to **True** so that you do not experience any unexpected changes in a future release.
+[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
+
- ALLOW_DASHBOARD_DOMAIN_SHARDING
- DISPLAY_MARKDOWN_HTML
+- FORCE_DATABASE_CONNECTIONS_SSL
diff --git a/RESOURCES/INTHEWILD.md b/RESOURCES/INTHEWILD.md
index 61c000bf36f7..0f1cf65c5574 100644
--- a/RESOURCES/INTHEWILD.md
+++ b/RESOURCES/INTHEWILD.md
@@ -40,6 +40,8 @@ Join our growing community!
- [Cape Crypto](https://capecrypto.com)
- [Capital Service S.A.](http://capitalservice.pl) [@pkonarzewski]
- [Clark.de](http://clark.de/)
+- [KarrotPay](https://www.daangnpay.com/)
+- [Wise](https://wise.com) [@koszti]
- [Xendit](http://xendit.co/) [@LieAlbertTriAdrian]
### Gaming
@@ -48,6 +50,7 @@ Join our growing community!
### E-Commerce
- [AiHello](https://www.aihello.com) [@ganeshkrishnan1]
+- [Bazaar Technologies](https://www.bazaartech.com) [@umair-abro]
- [Dragonpass](https://www.dragonpass.com.cn/) [@zhxjdwh]
- [Fanatics](https://www.fanatics.com) [@coderfender]
- [Fordeal](http://www.fordeal.com) [@Renkai]
@@ -70,6 +73,8 @@ Join our growing community!
- [Apollo GraphQL](https://www.apollographql.com/) [@evans]
- [Astronomer](https://www.astronomer.io) [@ryw]
- [Avesta Technologies](https://avestatechnologies.com/) [@TheRum]
+- [Caizin](https://caizin.com/) [@tejaskatariya]
+- [Careem](https://www.careem.com/) [@SamraHanifCareem]
- [Cloudsmith](https://cloudsmith.io) [@alancarson]
- [CnOvit](http://www.cnovit.com/) [@xieshaohu]
- [Deepomatic](https://deepomatic.com/) [@Zanoellia]
@@ -84,10 +89,13 @@ Join our growing community!
- [Intercom](https://www.intercom.com/) [@kate-gallo]
- [jampp](https://jampp.com/)
- [Konfío](http://konfio.mx) [@uis-rodriguez]
+- [Mainstrat](https://mainstrat.com/)
- [mishmash io](https://mishmash.io/)[@mishmash-io]
- [Myra Labs](http://www.myralabs.com/) [@viksit]
- [Nielsen](http://www.nielsen.com/) [@amitNielsen]
- [Ona](https://ona.io) [@pld]
+- [Orange](https://www.orange.com) [@icsu]
+- [Oslandia](https://oslandia.com)
- [Peak AI](https://www.peak.ai/) [@azhar22k]
- [PeopleDoc](https://www.people-doc.com) [@rodo]
- [Preset, Inc.](https://preset.io)
@@ -120,10 +128,12 @@ Join our growing community!
### Education
- [Brilliant.org](https://brilliant.org/)
+- [Platzi.com](https://platzi.com/)
- [Sunbird](https://www.sunbird.org/) [@eksteporg]
- [The GRAPH Network](https://thegraphnetwork.org/)[@fccoelho]
- [Udemy](https://www.udemy.com/) [@sungjuly]
- [VIPKID](https://www.vipkid.com.cn/) [@illpanda]
+- [WikiMedia Foundation](https://wikimediafoundation.org) [@vg]
### Energy
- [Airboxlab](https://foobot.io) [@antoine-galataud]
@@ -138,13 +148,25 @@ Join our growing community!
- [Living Goods](https://www.livinggoods.org) [@chelule]
- [Maieutical Labs](https://maieuticallabs.it) [@xrmx]
- [QPID Health](http://www.qpidhealth.com/)
+- [REDCap Cloud](https://www.redcapcloud.com/)
- [TrustMedis](https://trustmedis.com) [@famasya]
- [WeSure](https://www.wesure.cn/)
### HR / Staffing
+- [Swile](https://www.swile.co/) [@PaoloTerzi]
- [Symmetrics](https://www.symmetrics.fyi)
+### News
+- [Prensa Iberica](https://www.prensaiberica.es/) [@zamar-roura]
+
+### Government
+- [City of Ann Arbor, MI](https://www.a2gov.org/) [@sfirke]
+
+### Travel
+- [Skyscanner](https://www.skyscanner.net/) [@cleslie, @stanhoucke]
+
### Others
+- [AI inside](https://inside.ai/en/)
- [Dropbox](https://www.dropbox.com/) [@bkyryliuk]
- [Grassroot](https://www.grassrootinstitute.org/)
- [komoot](https://www.komoot.com/) [@christophlingg]
diff --git a/UPDATING.md b/UPDATING.md
index abfe9a915e6f..c57098cb0b74 100644
--- a/UPDATING.md
+++ b/UPDATING.md
@@ -34,6 +34,38 @@ assists people when migrating to a new version.
## 2.0.0
+- [22022](https://github.com/apache/superset/pull/22022): HTTP API endpoints `/superset/approve` and `/superset/request_access` have been deprecated and their HTTP methods were changed from GET to POST
+- [20606](https://github.com/apache/superset/pull/20606): When user clicks on chart title or "Edit chart" button in Dashboard page, Explore opens in the same tab. Clicking while holding cmd/ctrl opens Explore in a new tab. To bring back the old behaviour (always opening Explore in a new tab), flip feature flag `DASHBOARD_EDIT_CHART_IN_NEW_TAB` to `True`.
+- [20799](https://github.com/apache/superset/pull/20799): Presto and Trino engine will now display tracking URL for running queries in SQL Lab. If for some reason you don't want to show the tracking URL (for example, when your data warehouse hasn't enabled access for to Presto or Trino UI), update `TRACKING_URL_TRANSFORMER` in `config.py` to return `None`.
+- [21002](https://github.com/apache/superset/pull/21002): Support Python 3.10 and bump pandas 1.4 and pyarrow 6.
+- [21163](https://github.com/apache/superset/pull/21163): The time grain will be decoupled from the time filter column and the time grain control will move below the X-Axis control when `GENERIC_CHART_AXES` feature flags set to `True`. The time grain will be applied on the time column in the column-like controls(x axis, dimensions) instead of the time column in the time section.
+- [21284](https://github.com/apache/superset/pull/21284): The non-functional `MAX_TABLE_NAMES` config key has been removed.
+- [21794](https://github.com/apache/superset/pull/21794): Deprecates the undocumented `PRESTO_SPLIT_VIEWS_FROM_TABLES` feature flag. Now for Presto, like other engines, only physical tables are treated as tables.
+
+### Breaking Changes
+
+- [22798](https://github.com/apache/superset/pull/22798): To make the welcome page more relevant in production environments, the last tab on the welcome page has been changed from to feature all charts/dashboards the user has access to (previously only examples were shown). To keep current behavior unchanged, add the following to your `superset_config.py`: `WELCOME_PAGE_LAST_TAB = "examples"`
+- [22328](https://github.com/apache/superset/pull/22328): For deployments that have enabled the "THUMBNAILS" feature flag, the function that calculates dashboard digests has been updated to consider additional properties to more accurately identify changes in the dashboard metadata. This change will invalidate all currently cached dashboard thumbnails.
+- [21765](https://github.com/apache/superset/pull/21765): For deployments that have enabled the "ALERT_REPORTS" feature flag, Gamma users will no longer have read and write access to Alerts & Reports by default. To give Gamma users the ability to schedule reports from the Dashboard and Explore view like before, create an additional role with "can read on ReportSchedule" and "can write on ReportSchedule" permissions. To further give Gamma users access to the "Alerts & Reports" menu and CRUD view, add "menu access on Manage" and "menu access on Alerts & Report" permissions to the role.
+
+### Potential Downtime
+
+- [21284](https://github.com/apache/superset/pull/21284): A change which drops the unused `dbs.allow_multi_schema_metadata_fetch` column via a (potentially locking) DDL operation.
+
+### Other
+
+## 2.0.1
+
+- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by Github. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
+
+## Breaking Changes
+
+## Potential Downtime
+
+## Other
+
+## 2.0.0
+
- [19046](https://github.com/apache/superset/pull/19046): Enables the drag and drop interface in Explore control panel by default. Flips `ENABLE_EXPLORE_DRAG_AND_DROP` and `ENABLE_DND_WITH_CLICK_UX` feature flags to `True`.
- [18936](https://github.com/apache/superset/pull/18936): Removes legacy SIP-15 interim logic/flags—specifically the `SIP_15_ENABLED`, `SIP_15_GRACE_PERIOD_END`, `SIP_15_DEFAULT_TIME_RANGE_ENDPOINTS`, and `SIP_15_TOAST_MESSAGE` flags. Time range endpoints are no longer configurable and strictly adhere to the `[start, end)` paradigm, i.e., inclusive of the start and exclusive of the end. Additionally this change removes the now obsolete `time_range_endpoints` from the form-data and resulting in the cache being busted.
- [19570](https://github.com/apache/superset/pull/19570): makes [sqloxide](https://pypi.org/project/sqloxide/) optional so the SIP-68 migration can be run on aarch64. If the migration is taking too long installing sqloxide manually should improve the performance.
@@ -56,6 +88,19 @@ assists people when migrating to a new version.
- [19017](https://github.com/apache/superset/pull/19017): Removes Python 3.7 support.
- [18970](https://github.com/apache/superset/pull/18970): The `DISABLE_LEGACY_DATASOURCE_EDITOR` feature flag is now `True` by default which disables the legacy datasource editor from being shown in the client.
+## 1.5.3
+
+### Other
+
+- [22022](https://github.com/apache/superset/pull/22022): HTTP API endpoints `/superset/approve` and `/superset/request_access` have been deprecated and their HTTP methods were changed from GET to POST
+- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by Github. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
+
+## 1.5.2
+
+### Other
+
+- [19570](https://github.com/apache/superset/pull/19570): makes [sqloxide](https://pypi.org/project/sqloxide/) optional so the SIP-68 migration can be run on aarch64. If the migration is taking too long installing sqloxide manually should improve the performance.
+
## 1.5.0
### Breaking Changes
diff --git a/cccs-build/superset/Dockerfile b/cccs-build/superset/Dockerfile
index ff5572bbaded..129d127688c4 100644
--- a/cccs-build/superset/Dockerfile
+++ b/cccs-build/superset/Dockerfile
@@ -1,7 +1,7 @@
# Vault CA container import
-ARG VAULT_CA_CONTAINER=uchimera.azurecr.io/cccs/hogwarts/vault-ca:master_2921_22315d60
+ARG VAULT_CA_CONTAINER=uchimera.azurecr.io/cccs/hogwarts/vault-ca:master_11376_a25c34e1
FROM $VAULT_CA_CONTAINER AS vault_ca
-FROM uchimera.azurecr.io/cccs/superset-base:feature_CLDN-1932-update-cccs-main-to-2.0.1-add-cccs-2.0_20230214125009_b6247
+FROM uchimera.azurecr.io/cccs/superset-base:feature_update-cccs-main-to-2.1.0-add-cccs-2.0_20230425191536_b6649
USER root
diff --git a/cccs-build/superset/requirements.txt b/cccs-build/superset/requirements.txt
index 16c4b3b74ebc..c00ba75cd333 100644
--- a/cccs-build/superset/requirements.txt
+++ b/cccs-build/superset/requirements.txt
@@ -9,4 +9,4 @@ trino==0.318.0
mysql-connector-python==8.0.26
elasticsearch-dbapi==0.2.4
cachetools~=5.0.0
-typing-extensions<4,>=3.10
+typing-extensions>=4, <5
diff --git a/docker-compose-non-dev.yml b/docker-compose-non-dev.yml
index 934349667709..e72222655184 100644
--- a/docker-compose-non-dev.yml
+++ b/docker-compose-non-dev.yml
@@ -26,7 +26,7 @@ x-superset-volumes: &superset-volumes
version: "3.7"
services:
redis:
- image: redis:latest
+ image: redis:7
container_name: superset_cache
restart: unless-stopped
volumes:
@@ -34,7 +34,7 @@ services:
db:
env_file: docker/.env-non-dev
- image: postgres:10
+ image: postgres:14
container_name: superset_db
restart: unless-stopped
volumes:
@@ -60,6 +60,8 @@ services:
depends_on: *superset-depends-on
user: "root"
volumes: *superset-volumes
+ healthcheck:
+ disable: true
superset-worker:
image: *superset-image
@@ -70,6 +72,8 @@ services:
depends_on: *superset-depends-on
user: "root"
volumes: *superset-volumes
+ healthcheck:
+ test: ["CMD-SHELL", "celery inspect ping -A superset.tasks.celery_app:app -d celery@$$HOSTNAME"]
superset-worker-beat:
image: *superset-image
@@ -80,6 +84,8 @@ services:
depends_on: *superset-depends-on
user: "root"
volumes: *superset-volumes
+ healthcheck:
+ disable: true
volumes:
superset_home:
diff --git a/docker-compose.yml b/docker-compose.yml
index 2c814363e784..89aecfd9e0e4 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -30,7 +30,7 @@ x-superset-volumes: &superset-volumes
version: "3.7"
services:
redis:
- image: redis:latest
+ image: redis:7
container_name: superset_cache
restart: unless-stopped
ports:
@@ -100,6 +100,8 @@ services:
volumes: *superset-volumes
environment:
CYPRESS_CONFIG: "${CYPRESS_CONFIG}"
+ healthcheck:
+ disable: true
superset-node:
image: node:16
@@ -118,6 +120,8 @@ services:
depends_on: *superset-depends-on
user: *superset-user
volumes: *superset-volumes
+ healthcheck:
+ test: ["CMD-SHELL", "celery inspect ping -A superset.tasks.celery_app:app -d celery@$$HOSTNAME"]
# Bump memory limit if processing selenium / thumbnails on superset-worker
# mem_limit: 2038m
# mem_reservation: 128M
@@ -131,6 +135,8 @@ services:
depends_on: *superset-depends-on
user: *superset-user
volumes: *superset-volumes
+ healthcheck:
+ disable: true
superset-tests-worker:
image: *superset-image
@@ -147,6 +153,8 @@ services:
depends_on: *superset-depends-on
user: *superset-user
volumes: *superset-volumes
+ healthcheck:
+ test: ["CMD-SHELL", "celery inspect ping -A superset.tasks.celery_app:app -d celery@$$HOSTNAME"]
volumes:
superset_home:
diff --git a/docker/.env b/docker/.env
index b31d631f2f70..8fa6f4533355 100644
--- a/docker/.env
+++ b/docker/.env
@@ -23,7 +23,7 @@ DATABASE_PASSWORD=superset
DATABASE_USER=superset
# database engine specific environment variables
-# change the below if you prefers another database engine
+# change the below if you prefer another database engine
DATABASE_PORT=5432
DATABASE_DIALECT=postgresql
POSTGRES_DB=superset
@@ -47,3 +47,4 @@ SUPERSET_ENV=development
SUPERSET_LOAD_EXAMPLES=yes
CYPRESS_CONFIG=false
SUPERSET_PORT=8088
+MAPBOX_API_KEY=''
diff --git a/docker/.env-non-dev b/docker/.env-non-dev
index 1cb5d30bdbbb..0ae4c1c7932b 100644
--- a/docker/.env-non-dev
+++ b/docker/.env-non-dev
@@ -23,7 +23,7 @@ DATABASE_PASSWORD=superset
DATABASE_USER=superset
# database engine specific environment variables
-# change the below if you prefers another database engine
+# change the below if you prefer another database engine
DATABASE_PORT=5432
DATABASE_DIALECT=postgresql
POSTGRES_DB=superset
@@ -44,3 +44,4 @@ SUPERSET_ENV=production
SUPERSET_LOAD_EXAMPLES=yes
CYPRESS_CONFIG=false
SUPERSET_PORT=8088
+MAPBOX_API_KEY=''
diff --git a/docker/README.md b/docker/README.md
index c867121daece..380b96a5074b 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -23,8 +23,8 @@ Docker is an easy way to get started with Superset.
## Prerequisites
-1. Docker! [link](https://www.docker.com/get-started)
-2. Docker-compose [link](https://docs.docker.com/compose/install/)
+1. [Docker](https://www.docker.com/get-started)
+2. [Docker Compose](https://docs.docker.com/compose/install/)
## Configuration
diff --git a/docker/docker-bootstrap.sh b/docker/docker-bootstrap.sh
index 150f351e4b0d..0784a0fdf2e5 100755
--- a/docker/docker-bootstrap.sh
+++ b/docker/docker-bootstrap.sh
@@ -37,7 +37,7 @@ fi
if [[ "${1}" == "worker" ]]; then
echo "Starting Celery worker..."
- celery --app=superset.tasks.celery_app:app worker -Ofair -l INFO
+ celery --app=superset.tasks.celery_app:app worker -O fair -l INFO
elif [[ "${1}" == "beat" ]]; then
echo "Starting Celery beat..."
celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid -l INFO -s "${SUPERSET_HOME}"/celerybeat-schedule
diff --git a/docker/docker-frontend.sh b/docker/docker-frontend.sh
index 4c0d01e07935..a1ad94470ce5 100755
--- a/docker/docker-frontend.sh
+++ b/docker/docker-frontend.sh
@@ -17,8 +17,11 @@
#
set -e
+# Packages needed for puppeteer:
+apt update
+apt install -y chromium
+
cd /app/superset-frontend
-npm install -g npm@7
npm install -f --no-optional --global webpack webpack-cli
npm install -f --no-optional
diff --git a/docker/pythonpath_dev/superset_config.py b/docker/pythonpath_dev/superset_config.py
index 84c1dc58ab50..7bfe2012c27e 100644
--- a/docker/pythonpath_dev/superset_config.py
+++ b/docker/pythonpath_dev/superset_config.py
@@ -81,13 +81,12 @@ def get_env_variable(var_name: str, default: Optional[str] = None) -> str:
class CeleryConfig(object):
- BROKER_URL = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CELERY_DB}"
- CELERY_IMPORTS = ("superset.sql_lab",)
- CELERY_RESULT_BACKEND = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_RESULTS_DB}"
- CELERYD_LOG_LEVEL = "DEBUG"
- CELERYD_PREFETCH_MULTIPLIER = 1
- CELERY_ACKS_LATE = False
- CELERYBEAT_SCHEDULE = {
+ broker_url = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CELERY_DB}"
+ imports = ("superset.sql_lab",)
+ result_backend = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_RESULTS_DB}"
+ worker_prefetch_multiplier = 1
+ task_acks_late = False
+ beat_schedule = {
"reports.scheduler": {
"task": "reports.scheduler",
"schedule": crontab(minute="*", hour="*"),
diff --git a/docs/README.md b/docs/README.md
index f4a122ba2f5b..1427f21640a2 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -17,36 +17,4 @@ specific language governing permissions and limitations
under the License.
-->
-# Website
-
-This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
-
-### Installation
-
-```
-$ yarn install
-```
-
-### Local Development
-
-```
-$ yarn start
-```
-
-This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
-
-### Build
-
-```
-$ yarn build
-```
-
-This command generates static content into the `build` directory and can be served using any static contents hosting service.
-
-### Deployment
-
-```
-$ GIT_USER= USE_SSH=true yarn deploy
-```
-
-If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
+This is the public documentation site for Superset, built using [Docusaurus 2](https://docusaurus.io/). See [CONTRIBUTING.md](../CONTRIBUTING.md#documentation) for documentation on contributing to documentation.
diff --git a/docs/docs/contributing/contributing-page.mdx b/docs/docs/contributing/contributing-page.mdx
index 6e205bf0bbf8..1619d7fed7e6 100644
--- a/docs/docs/contributing/contributing-page.mdx
+++ b/docs/docs/contributing/contributing-page.mdx
@@ -12,7 +12,7 @@ The core contributors (or committers) to Superset communicate primarily in the f
which can be joined by anyone):
- [Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org)
-- [Apache Superset Slack community](https://join.slack.com/t/apache-superset/shared_invite/zt-16jvzmoi8-sI7jKWp~xc2zYRe~NqiY9Q)
+- [Apache Superset Slack community](http://bit.ly/join-superset-slack)
- [GitHub issues and PR's](https://github.com/apache/superset/issues)
More references:
diff --git a/docs/docs/contributing/testing-locally.mdx b/docs/docs/contributing/testing-locally.mdx
index 22a628b66150..ae08b1878a13 100644
--- a/docs/docs/contributing/testing-locally.mdx
+++ b/docs/docs/contributing/testing-locally.mdx
@@ -54,6 +54,20 @@ You can run unit tests found in './tests/unit_tests' for example with pytest. It
pytest ./link_to_test.py
```
+#### Testing with local Presto connections
+
+If you happen to change db engine spec for Presto/Trino, you can run a local Presto cluster with Docker:
+
+```bash
+docker run -p 15433:15433 starburstdata/presto:350-e.6
+```
+
+Then update `SUPERSET__SQLALCHEMY_EXAMPLES_URI` to point to local Presto cluster:
+
+```bash
+export SUPERSET__SQLALCHEMY_EXAMPLES_URI=presto://localhost:15433/memory/default
+```
+
### Frontend Testing
We use [Jest](https://jestjs.io/) and [Enzyme](https://airbnb.io/enzyme/) to test TypeScript/JavaScript. Tests can be run with:
diff --git a/docs/docs/contributing/translations.mdx b/docs/docs/contributing/translations.mdx
index 52200aedff04..13572f801e2d 100644
--- a/docs/docs/contributing/translations.mdx
+++ b/docs/docs/contributing/translations.mdx
@@ -7,10 +7,10 @@ version: 1
## Translating
-We use [Flask-Babel](https://flask-babel.tkte.ch/) to translate Superset.
+We use [Flask-Babel](https://python-babel.github.io/flask-babel/) to translate Superset.
In Python files, we use the following
-[translation functions](https://flask-babel.tkte.ch/#using-translations) from
-`Flask-Babel`:
+[translation functions](https://python-babel.github.io/flask-babel/#using-translations)
+from `Flask-Babel`:
- `gettext` and `lazy_gettext` (usually aliased to `_`): for translating singular
strings.
- `ngettext`: for translating strings that might become plural.
diff --git a/docs/docs/contributing/types-of-contributions.mdx b/docs/docs/contributing/types-of-contributions.mdx
index a9fa907f553d..cb6a5a5d863d 100644
--- a/docs/docs/contributing/types-of-contributions.mdx
+++ b/docs/docs/contributing/types-of-contributions.mdx
@@ -19,15 +19,17 @@ The best way to report a bug is to file an issue on GitHub. Please include:
When posting Python stack traces, please quote them using
[Markdown blocks](https://help.github.com/articles/creating-and-highlighting-code-blocks/).
+_Please note that feature requests opened as Github Issues will be moved to Discussions._
+
### Submit Ideas or Feature Requests
-The best way is to file an issue on GitHub:
+The best way is to start an ["Ideas" Discussion thread](https://github.com/apache/superset/discussions/categories/ideas) on GitHub:
- Explain in detail how it would work.
- Keep the scope as narrow as possible, to make it easier to implement.
-- Remember that this is a volunteer-driven project, and that contributions are welcome :)
+- Remember that this is a volunteer-driven project, and that your contributions are as welcome as anyone's :)
-For large features or major changes to codebase, please create **Superset Improvement Proposal (SIP)**. See template from [SIP-0](https://github.com/apache/superset/issues/5602)
+To propose large features or major changes to codebase, and help usher in those changes, please create a **Superset Improvement Proposal (SIP)**. See template from [SIP-0](https://github.com/apache/superset/issues/5602)
### Fix Bugs
diff --git a/docs/docs/creating-charts-dashboards/creating-your-first-dashboard.mdx b/docs/docs/creating-charts-dashboards/creating-your-first-dashboard.mdx
index ecabf896f8e4..48792e319979 100644
--- a/docs/docs/creating-charts-dashboards/creating-your-first-dashboard.mdx
+++ b/docs/docs/creating-charts-dashboards/creating-your-first-dashboard.mdx
@@ -183,7 +183,7 @@ Access to dashboards is managed via owners (users that have edit permissions to
Non-owner users access can be managed two different ways:
1. Dataset permissions - if you add to the relevant role permissions to datasets it automatically grants implicit access to all dashboards that uses those permitted datasets
-2. Dashboard roles - if you enable **DASHBOARD_RBAC** feature flag then you be able to manage which roles can access the dashboard
+2. Dashboard roles - if you enable **DASHBOARD_RBAC** [feature flag](https://superset.apache.org/docs/installation/configuring-superset#feature-flags) then you be able to manage which roles can access the dashboard
- Having dashboard access implicitly grants read access to the associated datasets, therefore
all charts will load their data even if feature flag is turned on and no roles assigned
to roles the access will fallback to **Dataset permissions**
diff --git a/docs/docs/databases/athena.mdx b/docs/docs/databases/athena.mdx
index feabad302d73..55282d68adb9 100644
--- a/docs/docs/databases/athena.mdx
+++ b/docs/docs/databases/athena.mdx
@@ -32,3 +32,11 @@ following connection string:
```
awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
```
+
+The PyAthena library also allows to assume a specific IAM role, by [importing the datasource from YAML](https://superset.apache.org/docs/miscellaneous/importing-exporting-datasources/#importing-datasources-from-yaml) and passing extra parameters:
+```
+databases:
+ - database_name: awsathena
+ sqlalchemy_uri: awsathena+rest://athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
+ extra: "{\"engine_params\": {\"connect_args\": {\"role_arn\": \"{{ ROLE_ARN }}\" }}}"
+```
diff --git a/docs/docs/databases/bigquery.mdx b/docs/docs/databases/bigquery.mdx
index 6d3ba0750e65..7ea993ae5d4e 100644
--- a/docs/docs/databases/bigquery.mdx
+++ b/docs/docs/databases/bigquery.mdx
@@ -8,7 +8,7 @@ version: 1
## Google BigQuery
The recommended connector library for BigQuery is
-[pybigquery](https://github.com/mxmzdlv/pybigquery).
+[sqlalchemy-bigquery](https://github.com/googleapis/python-bigquery-sqlalchemy).
### Install BigQuery Driver
@@ -16,7 +16,7 @@ Follow the steps [here](/docs/databases/docker-add-drivers) about how to
install new database drivers when setting up Superset locally via docker-compose.
```
-echo "pybigquery" >> ./docker/requirements-local.txt
+echo "sqlalchemy-bigquery" >> ./docker/requirements-local.txt
```
### Connecting to BigQuery
diff --git a/docs/docs/databases/clickhouse.mdx b/docs/docs/databases/clickhouse.mdx
index e717b60bf0b2..424e50da9352 100644
--- a/docs/docs/databases/clickhouse.mdx
+++ b/docs/docs/databases/clickhouse.mdx
@@ -7,38 +7,36 @@ version: 1
## ClickHouse
-To use ClickHouse with Superset, you will need to add the following Python libraries:
+To use ClickHouse with Superset, you will need to add the following Python library:
```
-clickhouse-driver==0.2.0
-clickhouse-sqlalchemy==0.1.6
+clickhouse-connect>=0.4.1
```
If running Superset using Docker Compose, add the following to your `./docker/requirements-local.txt` file:
```
-clickhouse-driver>=0.2.0
-clickhouse-sqlalchemy>=0.1.6
+clickhouse-connect>=0.4.1
```
The recommended connector library for ClickHouse is
-[sqlalchemy-clickhouse](https://github.com/cloudflare/sqlalchemy-clickhouse).
+[clickhouse-connect](https://github.com/ClickHouse/clickhouse-connect).
The expected connection string is formatted as follows:
```
-clickhouse+native://:@:/[?options…]clickhouse://{username}:{password}@{hostname}:{port}/{database}
+clickhousedb://:@:/[?options…]clickhouse://{username}:{password}@{hostname}:{port}/{database}
```
Here's a concrete example of a real connection string:
```
-clickhouse+native://demo:demo@github.demo.trial.altinity.cloud/default?secure=true
+clickhousedb://demo:demo@github.demo.trial.altinity.cloud/default?secure=true
```
-If you're using Clickhouse locally on your computer, you can get away with using a native protocol URL that
+If you're using Clickhouse locally on your computer, you can get away with using a http protocol URL that
uses the default user without a password (and doesn't encrypt the connection):
```
-clickhouse+native://localhost/default
+clickhousedb://localhost/default
```
diff --git a/docs/docs/databases/databricks.mdx b/docs/docs/databases/databricks.mdx
index 4070960ce2af..e9bbd4b68521 100644
--- a/docs/docs/databases/databricks.mdx
+++ b/docs/docs/databases/databricks.mdx
@@ -33,13 +33,10 @@ You also need to add the following configuration to "Other" -> "Engine Parameter
```json
{
- "connect_args": {"http_path": "sql/protocolv1/o/****"},
- "http_headers": [["User-Agent", "Apache Superset"]]
+ "connect_args": {"http_path": "sql/protocolv1/o/****"}
}
```
-The `User-Agent` header is optional, but helps Databricks identify traffic from Superset. If you need to use a different header please reach out to Databricks and let them know.
-
## Older driver
Originally Superset used `databricks-dbapi` to connect to Databricks. You might want to try it if you're having problems with the official Databricks connector:
diff --git a/docs/docs/databases/docker-add-drivers.mdx b/docs/docs/databases/docker-add-drivers.mdx
index 725a6e671c5b..cfb504b5e474 100644
--- a/docs/docs/databases/docker-add-drivers.mdx
+++ b/docs/docs/databases/docker-add-drivers.mdx
@@ -53,7 +53,7 @@ Rebuild your local image with the new driver baked in:
docker-compose build --force-rm
```
-After the rebuild of the Docker images is complete (which make take a few minutes) you can relaunch using the following command:
+After the rebuild of the Docker images is complete (which may take a few minutes) you can relaunch using the following command:
```
docker-compose up
diff --git a/docs/docs/databases/druid.mdx b/docs/docs/databases/druid.mdx
index 6641898aa497..95e9bbc15a8a 100644
--- a/docs/docs/databases/druid.mdx
+++ b/docs/docs/databases/druid.mdx
@@ -18,6 +18,12 @@ The connection string looks like:
```
druid://:@:/druid/v2/sql
```
+Here's a breakdown of the key components of this connection string:
+
+User: username portion of the credentials needed to connect to your database
+Password: password portion of the credentials needed to connect to your database
+Host: IP address (or URL) of the host machine that's running your database
+Port: specific port that's exposed on your host machine where your database is running
### Customizing Druid Connection
diff --git a/docs/docs/databases/dynamodb.mdx b/docs/docs/databases/dynamodb.mdx
new file mode 100644
index 000000000000..4cb9e1e4f807
--- /dev/null
+++ b/docs/docs/databases/dynamodb.mdx
@@ -0,0 +1,20 @@
+---
+title: Amazon DynamoDB
+hide_title: true
+sidebar_position: 4
+version: 1
+---
+
+## AWS DynamoDB
+
+### PyDynamoDB
+
+[PyDynamoDB](https://pypi.org/project/PyDynamoDB/) is a Python DB API 2.0 (PEP 249) client for Amazon DynamoDB.
+
+The connection string for Amazon DynamoDB is as follows:
+
+```
+dynamodb://{aws_access_key_id}:{aws_secret_access_key}@dynamodb.{region_name}.amazonaws.com:443?connector=superset
+```
+
+To get more documentation, please visit: [PyDynamoDB WIKI](https://github.com/passren/PyDynamoDB/wiki/5.-Superset).
diff --git a/docs/docs/databases/elasticsearch.mdx b/docs/docs/databases/elasticsearch.mdx
index 70b7f8f685e2..6fb922815ca0 100644
--- a/docs/docs/databases/elasticsearch.mdx
+++ b/docs/docs/databases/elasticsearch.mdx
@@ -66,3 +66,11 @@ you need to use the `CAST` function,but this function does not support our `time
After elasticsearch7.8, you can use the `DATETIME_PARSE` function to solve this problem.
The DATETIME_PARSE function is to support our `time_zone` setting, and here you need to fill in your elasticsearch version number in the Other > VERSION setting.
the superset will use the `DATETIME_PARSE` function for conversion.
+
+**Disable SSL Verification**
+
+To disable SSL verification, add the following to the **SQLALCHEMY URI** field:
+
+```
+elasticsearch+https://{user}:{password}@{host}:9200/?verify_certs=False
+```
diff --git a/docs/docs/databases/installing-database-drivers.mdx b/docs/docs/databases/installing-database-drivers.mdx
index cb404fb480a4..ee1b385336db 100644
--- a/docs/docs/databases/installing-database-drivers.mdx
+++ b/docs/docs/databases/installing-database-drivers.mdx
@@ -23,6 +23,7 @@ A list of some of the recommended packages.
| Database | PyPI package | Connection String |
| --------------------------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| [Amazon Athena](/docs/databases/athena) | `pip install "PyAthenaJDBC>1.0.9` , `pip install "PyAthena>1.2.0` | `awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{ ` |
+| [Amazon DynamoDB](/docs/databases/dynamodb) | `pip install "PyDynamoDB>=0.4.2` | `dynamodb://{access_key_id}:{secret_access_key}@dynamodb.{region_name}.amazonaws.com?connector=superset` |
| [Amazon Redshift](/docs/databases/redshift) | `pip install sqlalchemy-redshift` | ` redshift+psycopg2://:@:5439/` |
| [Apache Drill](/docs/databases/drill) | `pip install sqlalchemy-drill` | `drill+sadrill:// For JDBC drill+jdbc://` |
| [Apache Druid](/docs/databases/druid) | `pip install pydruid` | `druid://:@:/druid/v2/sql` |
@@ -34,8 +35,8 @@ A list of some of the recommended packages.
| [Apache Spark SQL](/docs/databases/spark-sql) | `pip install pyhive` | `hive://hive@{hostname}:{port}/{database}` |
| [Ascend.io](/docs/databases/ascend) | `pip install impyla` | `ascend://{username}:{password}@{hostname}:{port}/{database}?auth_mechanism=PLAIN;use_ssl=true` |
| [Azure MS SQL](/docs/databases/sql-server) | `pip install pymssql` | `mssql+pymssql://UserName@presetSQL:TestPassword@presetSQL.database.windows.net:1433/TestSchema` |
-| [Big Query](/docs/databases/bigquery) | `pip install pybigquery` | `bigquery://{project_id}` |
-| [ClickHouse](/docs/databases/clickhouse) | `pip install clickhouse-driver==0.2.0 && pip install clickhouse-sqlalchemy==0.1.6` | `clickhouse+native://{username}:{password}@{hostname}:{port}/{database}` |
+| [Big Query](/docs/databases/bigquery) | `pip install sqlalchemy-bigquery` | `bigquery://{project_id}` |
+| [ClickHouse](/docs/databases/clickhouse) | `pip install clickhouse-connect` | `clickhousedb://{username}:{password}@{hostname}:{port}/{database}` |
| [CockroachDB](/docs/databases/cockroachdb) | `pip install cockroachdb` | `cockroachdb://root@{hostname}:{port}/{database}?sslmode=disable` |
| [Dremio](/docs/databases/dremio) | `pip install sqlalchemy_dremio` | `dremio://user:pwd@host:31010/` |
| [Elasticsearch](/docs/databases/elasticsearch) | `pip install elasticsearch-dbapi` | `elasticsearch+http://{user}:{password}@{host}:9200/` |
@@ -48,16 +49,16 @@ A list of some of the recommended packages.
| [MySQL](/docs/databases/mysql) | `pip install mysqlclient` | `mysql://:@/` |
| [Oracle](/docs/databases/oracle) | `pip install cx_Oracle` | `oracle://` |
| [PostgreSQL](/docs/databases/postgres) | `pip install psycopg2` | `postgresql://:@/` |
-| [Trino](/docs/databases/trino) | `pip install sqlalchemy-trino` | `trino://{username}:{password}@{hostname}:{port}/{catalog}` |
+| [Trino](/docs/databases/trino) | `pip install trino` | `trino://{username}:{password}@{hostname}:{port}/{catalog}` |
| [Presto](/docs/databases/presto) | `pip install pyhive` | `presto://` |
| [SAP Hana](/docs/databases/hana) | `pip install hdbcli sqlalchemy-hana or pip install apache-superset[hana]` | `hana://{username}:{password}@{host}:{port}` |
| [Snowflake](/docs/databases/snowflake) | `pip install snowflake-sqlalchemy` | `snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}` |
| SQLite | No additional library needed | `sqlite://` |
-| [SQL Server](/docs/databases/sql-server) | `pip install pymssql` | `mssql://` |
-| [Teradata](/docs/databases/teradata) | `pip install teradatasqlalchemy ` | `teradata://{user}:{password}@{host}` |
+| [SQL Server](/docs/databases/sql-server) | `pip install pymssql` | `mssql+pymssql://` |
+| [Teradata](/docs/databases/teradata) | `pip install teradatasqlalchemy` | `teradatasql://{user}:{password}@{host}` |
+| [TimescaleDB](/docs/databases/timescaledb) | `pip install psycopg2` | `postgresql://:@:/` |
| [Vertica](/docs/databases/vertica) | `pip install sqlalchemy-vertica-python` | `vertica+vertica_python://:@/` |
-| [YugabyteDB](/docs/databases/yugabytedb) | `pip install psycopg2` | `postgresql://:@/` |
-
+| [YugabyteDB](/docs/databases/yugabytedb) | `pip install psycopg2` | `postgresql://:@/` |
---
Note that many other databases are supported, the main criteria being the existence of a functional
diff --git a/docs/docs/databases/kusto.mdx b/docs/docs/databases/kusto.mdx
new file mode 100644
index 000000000000..3efe4ac8f5be
--- /dev/null
+++ b/docs/docs/databases/kusto.mdx
@@ -0,0 +1,26 @@
+---
+name: Kusto
+hide_title: true
+sidebar_position: 41
+version: 2
+---
+
+## Kusto
+
+The recommended connector library for Kusto is
+[sqlalchemy-kusto](https://pypi.org/project/sqlalchemy-kusto/2.0.0/)>=2.0.0.
+
+The connection string for Kusto (sql dialect) looks like this:
+
+```
+kustosql+https://{cluster_url}/{database}?azure_ad_client_id={azure_ad_client_id}&azure_ad_client_secret={azure_ad_client_secret}&azure_ad_tenant_id={azure_ad_tenant_id}&msi=False
+```
+
+The connection string for Kusto (kql dialect) looks like this:
+
+```
+kustokql+https://{cluster_url}/{database}?azure_ad_client_id={azure_ad_client_id}&azure_ad_client_secret={azure_ad_client_secret}&azure_ad_tenant_id={azure_ad_tenant_id}&msi=False
+```
+
+Make sure the user has privileges to access and use all required
+databases/tables/views.
diff --git a/docs/docs/databases/risingwave.mdx b/docs/docs/databases/risingwave.mdx
new file mode 100644
index 000000000000..ddd22d739845
--- /dev/null
+++ b/docs/docs/databases/risingwave.mdx
@@ -0,0 +1,17 @@
+---
+title: RisingWave
+hide_title: true
+sidebar_position: 16
+version: 1
+---
+
+## RisingWave
+
+The recommended connector library for RisingWave is
+[sqlalchemy-risingwave](https://github.com/risingwavelabs/sqlalchemy-risingwave).
+
+The expected connection string is formatted as follows:
+
+```
+risingwave://root@{hostname}:{port}/{database}?sslmode=disable
+```
diff --git a/docs/docs/databases/snowflake.mdx b/docs/docs/databases/snowflake.mdx
index f0fc1a4a58e5..d128e4301688 100644
--- a/docs/docs/databases/snowflake.mdx
+++ b/docs/docs/databases/snowflake.mdx
@@ -8,7 +8,7 @@ version: 1
## Snowflake
The recommended connector library for Snowflake is
-[snowflake-sqlalchemy](https://pypi.org/project/snowflake-sqlalchemy/1.2.4/)<=1.2.4. (This version is required until Superset migrates to sqlalchemy>=1.4.0)
+[snowflake-sqlalchemy](https://pypi.org/project/snowflake-sqlalchemy/).
The connection string for Snowflake looks like this:
@@ -29,3 +29,31 @@ user/role rights during engine creation by default. However, when pressing the
button in the Create or Edit Database dialog, user/role credentials are validated by passing
“validate_default_parameters”: True to the connect() method during engine creation. If the user/role
is not authorized to access the database, an error is recorded in the Superset logs.
+
+And if you want connect Snowflake with [Key Pair Authentication](https://docs.snowflake.com/en/user-guide/key-pair-auth.html#step-6-configure-the-snowflake-client-to-use-key-pair-authentication).
+Plase make sure you have the key pair and the public key is registered in Snowflake.
+To connect Snowflake with Key Pair Authentication, you need to add the following parameters to "SECURE EXTRA" field.
+
+***Please note that you need to merge multi-line private key content to one line and insert `\n` between each line***
+
+```
+{
+ "auth_method": "keypair",
+ "auth_params": {
+ "privatekey_body": "-----BEGIN ENCRYPTED PRIVATE KEY-----\n...\n...\n-----END ENCRYPTED PRIVATE KEY-----",
+ "privatekey_pass":"Your Private Key Password"
+ }
+ }
+```
+
+If your private key is stored on server, you can replace "privatekey_body" with “privatekey_path” in parameter.
+
+```
+{
+ "auth_method": "keypair",
+ "auth_params": {
+ "privatekey_path":"Your Private Key Path",
+ "privatekey_pass":"Your Private Key Password"
+ }
+}
+```
diff --git a/docs/docs/databases/sql-server.mdx b/docs/docs/databases/sql-server.mdx
index f9ceb4c751c7..8b7c833c8d6b 100644
--- a/docs/docs/databases/sql-server.mdx
+++ b/docs/docs/databases/sql-server.mdx
@@ -14,3 +14,10 @@ The connection string for SQL Server looks like this:
```
mssql+pymssql://:@://?Encrypt=yes
```
+
+It is also possible to connect using [pyodbc](https://pypi.org/project/pyodbc) with the parameter [odbc_connect](https://docs.sqlalchemy.org/en/14/dialects/mssql.html#pass-through-exact-pyodbc-string)
+
+The connection string for SQL Server looks like this:
+```
+mssql+pyodbc:///?odbc_connect=Driver%3D%7BODBC+Driver+17+for+SQL+Server%7D%3BServer%3Dtcp%3A%3Cmy_server%3E%2C1433%3BDatabase%3Dmy_datasbase%3BUid%3Dmy_user_name%3BPwd%3Dmy_password%3BEncrypt%3Dyes%3BConnection+Timeout%3D30
+```
diff --git a/docs/docs/databases/teradata.mdx b/docs/docs/databases/teradata.mdx
index 2f765a2146cf..8b7a91c9146e 100644
--- a/docs/docs/databases/teradata.mdx
+++ b/docs/docs/databases/teradata.mdx
@@ -13,7 +13,7 @@ The recommended connector library is
The connection string for Teradata looks like this:
```
-teradata://{user}:{password}@{host}
+teradatasql://{user}:{password}@{host}
```
## ODBC Driver
diff --git a/docs/docs/databases/timescaledb.mdx b/docs/docs/databases/timescaledb.mdx
new file mode 100644
index 000000000000..2ab93e68b43f
--- /dev/null
+++ b/docs/docs/databases/timescaledb.mdx
@@ -0,0 +1,38 @@
+---
+title: TimescaleDB
+hide_title: true
+sidebar_position: 31
+version: 1
+---
+
+## TimescaleDB
+[TimescaleDB](https://www.timescale.com) is the open-source relational database for time-series and analytics to build powerful data-intensive applications.
+TimescaleDB is a PostgreSQL extension, and you can use the standard PostgreSQL connector library, [psycopg2](https://www.psycopg.org/docs/), to connect to the database.
+
+If you're using docker-compose, psycopg2 comes out of the box with Superset.
+
+TimescaleDB sample connection parameters:
+
+- **User Name**: User
+- **Password**: Password
+- **Database Host**:
+ - For Localhost: localhost or 127.0.0.1
+ - For On Prem: IP address or Host name
+ - For [Timescale Cloud](https://console.cloud.timescale.com) service: Host name
+ - For [Managed Service for TimescaleDB](https://portal.managed.timescale.com) service: Host name
+- **Database Name**: Database Name
+- **Port**: default 5432 or Port number of the service
+
+The connection string looks like:
+
+```
+postgresql://{username}:{password}@{host}:{port}/{database name}
+```
+
+You can require SSL by adding `?sslmode=require` at the end (e.g. in case you use [Timescale Cloud](https://www.timescale.com/cloud)):
+
+```
+postgresql://{username}:{password}@{host}:{port}/{database name}?sslmode=require
+```
+
+[Learn more about TimescaleDB!](https://docs.timescale.com/)
diff --git a/docs/docs/databases/trino.mdx b/docs/docs/databases/trino.mdx
index 50ccf1f27123..4d6bfcf34320 100644
--- a/docs/docs/databases/trino.mdx
+++ b/docs/docs/databases/trino.mdx
@@ -56,7 +56,21 @@ In `Secure Extra` field, config as following example:
All fields in `auth_params` are passed directly to the [`KerberosAuthentication`](https://github.com/trinodb/trino-python-client/blob/0.306.0/trino/auth.py#L40) class.
-#### 3. JWT Authentication
+#### 3. Certificate Authentication
+In `Secure Extra` field, config as following example:
+```json
+{
+ "auth_method": "certificate",
+ "auth_params": {
+ "cert": "/path/to/cert.pem",
+ "key": "/path/to/key.pem"
+ }
+}
+```
+
+All fields in `auth_params` are passed directly to the [`CertificateAuthentication`](https://github.com/trinodb/trino-python-client/blob/0.315.0/trino/auth.py#L416) class.
+
+#### 4. JWT Authentication
Config `auth_method` and provide token in `Secure Extra` field
```json
{
@@ -67,7 +81,7 @@ Config `auth_method` and provide token in `Secure Extra` field
}
```
-#### 4. Custom Authentication
+#### 5. Custom Authentication
To use custom authentication, first you need to add it into
`ALLOWED_EXTRA_AUTHENTICATIONS` allow list in Superset config file:
```python
diff --git a/docs/docs/frequently-asked-questions.mdx b/docs/docs/frequently-asked-questions.mdx
index 04b30b272b44..779f6c8c8dc7 100644
--- a/docs/docs/frequently-asked-questions.mdx
+++ b/docs/docs/frequently-asked-questions.mdx
@@ -57,14 +57,6 @@ timeout in configuration. For example:
SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6
```
-Superset is running on gunicorn web server, which may time out web requests. If you want to increase
-the default (50), you can specify the timeout when starting the web server with the -t flag, which
-is expressed in seconds.
-
-```
-superset runserver -t 300
-```
-
If you are seeing timeouts (504 Gateway Time-out) when loading dashboard or explore slice, you are
probably behind gateway or proxy server (such as Nginx). If it did not receive a timely response
from Superset server (which is processing long queries), these web servers will send 504 status code
@@ -80,7 +72,7 @@ SUPERSET_WEBSERVER_TIMEOUT = 60
### Why is the map not visible in the geospatial visualization?
You need to register a free account at [Mapbox.com](https://www.mapbox.com), obtain an API key, and add it
-to **superset_config.py** at the key MAPBOX_API_KEY:
+to **.env** and **.env-non-dev** at the key MAPBOX_API_KEY:
```
MAPBOX_API_KEY = "longstringofalphanumer1c"
diff --git a/docs/docs/installation/alerts-reports.mdx b/docs/docs/installation/alerts-reports.mdx
index a86f14893ec4..a193f6ff2659 100644
--- a/docs/docs/installation/alerts-reports.mdx
+++ b/docs/docs/installation/alerts-reports.mdx
@@ -7,7 +7,7 @@ version: 2
## Alerts and Reports
-(version 1.0.1 and above)
+*This covers versions 1.0.1 to current.*
Users can configure automated alerts and reports to send dashboards or charts to an email recipient or Slack channel.
@@ -20,21 +20,30 @@ Alerts and reports are disabled by default. To turn them on, you need to do some
#### Commons
-##### In your `superset_config.py`
+##### In your `superset_config.py` or `superset_config_docker.py`
-- `"ALERT_REPORTS"` feature flag must be turned to True.
-- `CELERYBEAT_SCHEDULE` in CeleryConfig must contain schedule for `reports.scheduler`.
+- `"ALERT_REPORTS"` [feature flag](https://superset.apache.org/docs/installation/configuring-superset#feature-flags) must be turned to True.
+- `beat_schedule` in CeleryConfig must contain schedule for `reports.scheduler`.
- At least one of those must be configured, depending on what you want to use:
- emails: `SMTP_*` settings
- Slack messages: `SLACK_API_TOKEN`
+###### Disable dry-run mode
+
+Screenshots will be taken but no messages actually sent as long as `ALERT_REPORTS_NOTIFICATION_DRY_RUN = True`, its default value in `config.py`. To disable dry-run mode and start receiving email/Slack notifications, set `ALERT_REPORTS_NOTIFICATION_DRY_RUN` to `False` in [superset config](https://github.com/apache/superset/blob/master/docker/pythonpath_dev/superset_config.py).
+
##### In your `Dockerfile`
- You must install a headless browser, for taking screenshots of the charts and dashboards. Only Firefox and Chrome are currently supported.
> If you choose Chrome, you must also change the value of `WEBDRIVER_TYPE` to `"chrome"` in your `superset_config.py`.
-Note : All the components required (headless browser, redis, postgres db, celery worker and celery beat) are present in the docker image if you are following [Installing Superset Locally](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose/).
-All you need to do is add the required config (See `Detailed Config`). Set `ALERT_REPORTS_NOTIFICATION_DRY_RUN` to `False` in [superset config](https://github.com/apache/superset/blob/master/docker/pythonpath_dev/superset_config.py) to disable dry-run mode and start receiving email/slack notifications.
+Note: All the components required (Firefox headless browser, Redis, Postgres db, celery worker and celery beat) are present in the *dev* docker image if you are following [Installing Superset Locally](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose/).
+All you need to do is add the required config variables described in this guide (See `Detailed Config`).
+
+If you are running a non-dev docker image, e.g., a stable release like `apache/superset:2.0.1`, that image does not include a headless browser. Only the `superset_worker` container needs this headless browser to browse to the target chart or dashboard.
+You can either install and configure the headless browser - see "Custom Dockerfile" section below - or when deploying via `docker-compose`, modify your `docker-compose.yml` file to use a dev image for the worker container and a stable release image for the `superset_app` container.
+
+*Note*: In this context, a "dev image" is the same application software as its corresponding non-dev image, just bundled with additional tools. So an image like `2.0.1-dev` is identical to `2.0.1` when it comes to stability, functionality, and running in production. The actual "in-development" versions of Superset - cutting-edge and unstable - are not tagged with version numbers on Docker Hub and will display version `0.0.0-dev` within the Superset UI.
#### Slack integration
@@ -52,21 +61,23 @@ To send alerts and reports to Slack channels, you need to create a new Slack App
6. The app should now be installed in your workspace, and a "Bot User OAuth Access Token" should have been created. Copy that token in the `SLACK_API_TOKEN` variable of your `superset_config.py`.
7. Restart the service (or run `superset init`) to pull in the new configuration.
-Note: when you configure an alert or a report, the Slack channel list take channel names without the leading '#' e.g. use `alerts` instead of `#alerts`.
+Note: when you configure an alert or a report, the Slack channel list takes channel names without the leading '#' e.g. use `alerts` instead of `#alerts`.
-#### Kubernetes specific
+#### Kubernetes-specific
- You must have a `celery beat` pod running. If you're using the chart included in the GitHub repository under [helm/superset](https://github.com/apache/superset/tree/master/helm/superset), you need to put `supersetCeleryBeat.enabled = true` in your values override.
- You can see the dedicated docs about [Kubernetes installation](/docs/installation/running-on-kubernetes) for more generic details.
#### Docker-compose specific
-##### You must have in your`docker-compose.yaml`
+##### You must have in your `docker-compose.yml`
-- a redis message broker
+- A Redis message broker
- PostgreSQL DB instead of SQLlite
-- one or more `celery worker`
-- a single `celery beat`
+- One or more `celery worker`
+- A single `celery beat`
+
+This process also works in a Docker swarm environment, you would just need to add `Deploy:` to the Superset, Redis and Postgres services along with your specific configs for your swarm.
### Detailed config
@@ -76,7 +87,11 @@ You can find documentation about each field in the default `config.py` in the Gi
You need to replace default values with your custom Redis, Slack and/or SMTP config.
-In the `CeleryConfig`, only the `CELERYBEAT_SCHEDULE` is relative to this feature, the rest of the `CeleryConfig` can be changed for your needs.
+Superset uses Celery beat and Celery worker(s) to send alerts and reports.
+- The beat is the scheduler that tells the worker when to perform its tasks. This schedule is defined when you create the alert or report.
+- The worker will process the tasks that need to be performed when an alert or report is fired.
+
+In the `CeleryConfig`, only the `beat_schedule` is relevant to this feature, the rest of the `CeleryConfig` can be changed for your needs.
```python
from celery.schedules import crontab
@@ -124,14 +139,15 @@ SCREENSHOT_LOAD_WAIT = 600
SLACK_API_TOKEN = "xoxb-"
# Email configuration
-SMTP_HOST = "smtp.sendgrid.net" #change to your host
+SMTP_HOST = "smtp.sendgrid.net" # change to your host
+SMTP_PORT = 2525 # your port, e.g. 587
SMTP_STARTTLS = True
SMTP_SSL_SERVER_AUTH = True # If your using an SMTP server with a valid certificate
SMTP_SSL = False
-SMTP_USER = "your_user"
-SMTP_PORT = 2525 # your port eg. 587
-SMTP_PASSWORD = "your_password"
+SMTP_USER = "your_user" # use the empty string "" if using an unauthenticated SMTP server
+SMTP_PASSWORD = "your_password" # use the empty string "" if using an unauthenticated SMTP server
SMTP_MAIL_FROM = "noreply@youremail.com"
+EMAIL_REPORTS_SUBJECT_PREFIX = "[Superset] " # optional - overwrites default value in config.py of "[Report] "
# WebDriver configuration
# If you use Firefox, you can stick with default values
@@ -149,19 +165,70 @@ WEBDRIVER_OPTION_ARGS = [
]
# This is for internal use, you can keep http
-WEBDRIVER_BASEURL="http://superset:8088"
-# This is the link sent to the recipient, change to your domain eg. https://superset.mydomain.com
-WEBDRIVER_BASEURL_USER_FRIENDLY="http://localhost:8088"
+WEBDRIVER_BASEURL = "http://superset:8088"
+# This is the link sent to the recipient. Change to your domain, e.g. https://superset.mydomain.com
+WEBDRIVER_BASEURL_USER_FRIENDLY = "http://localhost:8088"
+```
+
+You also need
+to specify on behalf of which username to render the dashboards. In general dashboards and charts
+are not accessible to unauthorized requests, that is why the worker needs to take over credentials
+of an existing user to take a snapshot.
+
+By default, Alerts and Reports are executed as the user that the `THUMBNAIL_SELENIUM_USER` config
+parameter is set to. To change this user, just change the config as follows:
+
+```python
+THUMBNAIL_SELENIUM_USER = 'username_with_permission_to_access_dashboards'
```
+In addition, it's also possible to execute the reports as the report owners/creators. This is typically
+needed if there isn't a central service account that has access to all objects or databases (e.g.
+when using user impersonation on database connections). For this there's the config flag
+`ALERTS_REPORTS_EXECUTE_AS` which makes it possible to customize how alerts and reports are executed.
+To first try to execute as the creator in the owners list (if present), then fall
+back to the creator, then the last modifier in the owners list (if present), then the
+last modifier, then an owner (giving priority to the last modifier and then the
+creator if either is contained within the list of owners, otherwise the first owner
+will be used) and finally `THUMBNAIL_SELENIUM_USER`, set as follows:
+
+```python
+from superset.reports.types import ReportScheduleExecutor
+
+ALERT_REPORTS_EXECUTE_AS = [
+ ReportScheduleExecutor.CREATOR_OWNER,
+ ReportScheduleExecutor.CREATOR,
+ ReportScheduleExecutor.MODIFIER_OWNER,
+ ReportScheduleExecutor.MODIFIER,
+ ReportScheduleExecutor.OWNER,
+ ReportScheduleExecutor.SELENIUM,
+]
+```
+
+
+**Important notes**
+
+- Be mindful of the concurrency setting for celery (using `-c 4`). Selenium/webdriver instances can
+ consume a lot of CPU / memory on your servers.
+- In some cases, if you notice a lot of leaked geckodriver processes, try running your celery
+ processes with `celery worker --pool=prefork --max-tasks-per-child=128 ...`
+- It is recommended to run separate workers for the `sql_lab` and `email_reports` tasks. This can be
+ done using the `queue` field in `task_annotations`.
+- Adjust `WEBDRIVER_BASEURL` in your configuration file if celery workers can’t access Superset via
+ its default value of `http://0.0.0.0:8080/`.
+
+
### Custom Dockerfile
-A webdriver (and headless browser) is needed to capture screenshots of the charts and dashboards which are then sent to the recipient. As the base superset image does not have a webdriver installed, we need to extend it and install the webdriver.
+If you're running the dev version of a released Superset image, like `apache/superset:2.0.1-dev`, you should be set with the above.
+
+But if you're building your own image, or starting with a non-dev version, a webdriver (and headless browser) is needed to capture screenshots of the charts and dashboards which are then sent to the recipient.
+Here's how you can modify your Dockerfile to take the screenshots either with Firefox or Chrome.
#### Using Firefox
```docker
-FROM apache/superset:1.0.1
+FROM apache/superset:2.0.1
USER root
@@ -182,7 +249,7 @@ USER superset
#### Using Chrome
```docker
-FROM apache/superset:1.0.1
+FROM apache/superset:2.0.1
USER root
@@ -191,7 +258,7 @@ RUN apt-get update && \
apt-get install -y --no-install-recommends ./google-chrome-stable_current_amd64.deb && \
rm -f google-chrome-stable_current_amd64.deb
-RUN export CHROMEDRIVER_VERSION=$(curl --silent https://chromedriver.storage.googleapis.com/LATEST_RELEASE_88) && \
+RUN export CHROMEDRIVER_VERSION=$(curl --silent https://chromedriver.storage.googleapis.com/LATEST_RELEASE_102) && \
wget -q https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip && \
unzip chromedriver_linux64.zip -d /usr/bin && \
chmod 755 /usr/bin/chromedriver && \
@@ -202,189 +269,7 @@ RUN pip install --no-cache gevent psycopg2 redis
USER superset
```
-> Don't forget to set `WEBDRIVER_TYPE` and `WEBDRIVER_OPTION_ARGS` in your config if you use Chrome.
-
-### Summary of steps to turn on alerts and reporting:
-
-Using the templates below,
-
-1. Create a new directory and create the Dockerfile
-2. Build the extended image using the Dockerfile
-3. Create the `docker-compose.yaml` file in the same directory
-4. Create a new subdirectory called `config`
-5. Create the `superset_config.py` file in the `config` subdirectory
-6. Run the image using `docker-compose up` in the same directory as the `docker-compose.py` file
-7. In a new terminal window, upgrade the DB by running `docker exec -it superset-1.0.1-extended superset db upgrade`
-8. Then run `docker exec -it superset-1.0.1-extended superset init`
-9. Then setup your admin user if need be, `docker exec -it superset-1.0.1-extended superset fab create-admin`
-10. Finally, restart the running instance - `CTRL-C`, then `docker-compose up`
-
-(note: v 1.0.1 is current at time of writing, you can change the version number to the latest version if a newer version is available)
-
-### Docker compose
-
-The docker compose file lists the services that will be used when running the image. The specific services needed for alerts and reporting are outlined below.
-
-#### Redis message broker
-
-To ferry requests between the celery worker and the Superset instance, we use a message broker. This template uses Redis.
-
-#### Replacing SQLite with Postgres
-
-While it might be possible to use SQLite for alerts and reporting, it is highly recommended using a more production ready DB for Superset in general. Our template uses Postgres.
-
-#### Celery worker
-
-The worker will process the tasks that need to be performed when an alert or report is fired.
-
-#### Celery beat
-
-The beat is the scheduler that tells the worker when to perform its tasks. This schedule is defined when you create the alert or report.
-
-#### Full `docker-compose.yaml` configuration
-
-The Redis, Postgres, Celery worker and Celery beat services are defined in the template:
-
-Config for `docker-compose.yaml`:
-
-```docker
-version: '3.6'
-services:
- redis:
- image: redis:6.0.9-buster
- restart: on-failure
- volumes:
- - redis:/data
- postgres:
- image: postgres
- restart: on-failure
- environment:
- POSTGRES_DB: superset
- POSTGRES_PASSWORD: superset
- POSTGRES_USER: superset
- volumes:
- - db:/var/lib/postgresql/data
- worker:
- image: superset-1.0.1-extended
- restart: on-failure
- healthcheck:
- disable: true
- depends_on:
- - superset
- - postgres
- - redis
- command: "celery --app=superset.tasks.celery_app:app worker --pool=gevent --concurrency=500"
- volumes:
- - ./config/:/app/pythonpath/
- beat:
- image: superset-1.0.1-extended
- restart: on-failure
- healthcheck:
- disable: true
- depends_on:
- - superset
- - postgres
- - redis
- command: "celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedule"
- volumes:
- - ./config/:/app/pythonpath/
- superset:
- image: superset-1.0.1-extended
- restart: on-failure
- environment:
- - SUPERSET_PORT=8088
- ports:
- - "8088:8088"
- depends_on:
- - postgres
- - redis
- command: gunicorn --bind 0.0.0.0:8088 --access-logfile - --error-logfile - --workers 5 --worker-class gthread --threads 4 --timeout 200 --limit-request-line 4094 --limit-request-field_size 8190 superset.app:create_app()
- volumes:
- - ./config/:/app/pythonpath/
-volumes:
- db:
- external: true
- redis:
- external: false
-```
-
-### Summary
-
-With the extended image created by using the `Dockerfile`, and then running that image using `docker-compose.yaml`, plus the required configurations in the `superset_config.py` you should now have alerts and reporting working correctly.
-
-- The above templates also work in a Docker swarm environment, you would just need to add `Deploy:` to the Superset, Redis and Postgres services along with your specific configs for your swarm
-
-# Old Reports feature
-
-## Scheduling and Emailing Reports
-
-(version 0.38 and below)
-
-### Email Reports
-
-Email reports allow users to schedule email reports for:
-
-- chart and dashboard visualization (attachment or inline)
-- chart data (CSV attachment on inline table)
-
-Enable email reports in your `superset_config.py` file:
-
-```python
-ENABLE_SCHEDULED_EMAIL_REPORTS = True
-```
-
-This flag enables some permissions that are stored in your database, so you'll want to run `superset init` again if you are running this in a dev environment.
-Now you will find two new items in the navigation bar that allow you to schedule email reports:
-
-- **Manage > Dashboard Emails**
-- **Manage > Chart Email Schedules**
-
-Schedules are defined in [crontab format](https://crontab.guru/) and each schedule can have a list
-of recipients (all of them can receive a single mail, or separate mails). For audit purposes, all
-outgoing mails can have a mandatory BCC.
-
-In order get picked up you need to configure a celery worker and a celery beat (see section above
-“Celery Tasks”). Your celery configuration also needs an entry `email_reports.schedule_hourly` for
-`CELERYBEAT_SCHEDULE`.
-
-To send emails you need to configure SMTP settings in your `superset_config.py` configuration file.
-
-```python
-EMAIL_NOTIFICATIONS = True
-
-SMTP_HOST = "email-smtp.eu-west-1.amazonaws.com"
-SMTP_STARTTLS = True
-SMTP_SSL = False
-SMTP_USER = "smtp_username"
-SMTP_PORT = 25
-SMTP_PASSWORD = os.environ.get("SMTP_PASSWORD")
-SMTP_MAIL_FROM = "insights@komoot.com"
-```
-
-To render dashboards you need to install a local browser on your Superset instance:
-
-- [geckodriver](https://github.com/mozilla/geckodriver) for Firefox
-- [chromedriver](http://chromedriver.chromium.org/) for Chrome
-
-You'll need to adjust the `WEBDRIVER_TYPE` accordingly in your configuration. You also need
-to specify on behalf of which username to render the dashboards. In general dashboards and charts
-are not accessible to unauthorized requests, that is why the worker needs to take over credentials
-of an existing user to take a snapshot.
-
-```python
-THUMBNAIL_SELENIUM_USER = 'username_with_permission_to_access_dashboards'
-```
-
-**Important notes**
-
-- Be mindful of the concurrency setting for celery (using `-c 4`). Selenium/webdriver instances can
- consume a lot of CPU / memory on your servers.
-- In some cases, if you notice a lot of leaked geckodriver processes, try running your celery
- processes with `celery worker --pool=prefork --max-tasks-per-child=128 ...`
-- It is recommended to run separate workers for the `sql_lab` and `email_reports` tasks. This can be
- done using the `queue` field in `CELERY_ANNOTATIONS`.
-- Adjust `WEBDRIVER_BASEURL` in your configuration file if celery workers can’t access Superset via
- its default value of `http://0.0.0.0:8080/`.
+Don't forget to set `WEBDRIVER_TYPE` and `WEBDRIVER_OPTION_ARGS` in your config if you use Chrome.
### Schedule Reports
@@ -392,94 +277,91 @@ You can optionally allow your users to schedule queries directly in SQL Lab. Thi
extra metadata to saved queries, which are then picked up by an external scheduled (like
[Apache Airflow](https://airflow.apache.org/)).
-To allow scheduled queries, add the following to your configuration file:
+To allow scheduled queries, add the following to `SCHEDULED_QUERIES` in your configuration file:
```python
-FEATURE_FLAGS = {
- # Configuration for scheduling queries from SQL Lab. This information is
- # collected when the user clicks "Schedule query", and saved into the `extra`
- # field of saved queries.
+SCHEDULED_QUERIES = {
+ # This information is collected when the user clicks "Schedule query",
+ # and saved into the `extra` field of saved queries.
# See: https://github.com/mozilla-services/react-jsonschema-form
- 'SCHEDULED_QUERIES': {
- 'JSONSCHEMA': {
- 'title': 'Schedule',
- 'description': (
- 'In order to schedule a query, you need to specify when it '
- 'should start running, when it should stop running, and how '
- 'often it should run. You can also optionally specify '
- 'dependencies that should be met before the query is '
- 'executed. Please read the documentation for best practices '
- 'and more information on how to specify dependencies.'
- ),
- 'type': 'object',
- 'properties': {
- 'output_table': {
- 'type': 'string',
- 'title': 'Output table name',
- },
- 'start_date': {
- 'type': 'string',
- 'title': 'Start date',
- # date-time is parsed using the chrono library, see
- # https://www.npmjs.com/package/chrono-node#usage
- 'format': 'date-time',
- 'default': 'tomorrow at 9am',
- },
- 'end_date': {
- 'type': 'string',
- 'title': 'End date',
- # date-time is parsed using the chrono library, see
- # https://www.npmjs.com/package/chrono-node#usage
- 'format': 'date-time',
- 'default': '9am in 30 days',
- },
- 'schedule_interval': {
- 'type': 'string',
- 'title': 'Schedule interval',
- },
- 'dependencies': {
- 'type': 'array',
- 'title': 'Dependencies',
- 'items': {
- 'type': 'string',
- },
- },
+ 'JSONSCHEMA': {
+ 'title': 'Schedule',
+ 'description': (
+ 'In order to schedule a query, you need to specify when it '
+ 'should start running, when it should stop running, and how '
+ 'often it should run. You can also optionally specify '
+ 'dependencies that should be met before the query is '
+ 'executed. Please read the documentation for best practices '
+ 'and more information on how to specify dependencies.'
+ ),
+ 'type': 'object',
+ 'properties': {
+ 'output_table': {
+ 'type': 'string',
+ 'title': 'Output table name',
+ },
+ 'start_date': {
+ 'type': 'string',
+ 'title': 'Start date',
+ # date-time is parsed using the chrono library, see
+ # https://www.npmjs.com/package/chrono-node#usage
+ 'format': 'date-time',
+ 'default': 'tomorrow at 9am',
+ },
+ 'end_date': {
+ 'type': 'string',
+ 'title': 'End date',
+ # date-time is parsed using the chrono library, see
+ # https://www.npmjs.com/package/chrono-node#usage
+ 'format': 'date-time',
+ 'default': '9am in 30 days',
},
- },
- 'UISCHEMA': {
'schedule_interval': {
- 'ui:placeholder': '@daily, @weekly, etc.',
+ 'type': 'string',
+ 'title': 'Schedule interval',
},
'dependencies': {
- 'ui:help': (
- 'Check the documentation for the correct format when '
- 'defining dependencies.'
- ),
+ 'type': 'array',
+ 'title': 'Dependencies',
+ 'items': {
+ 'type': 'string',
+ },
},
},
- 'VALIDATION': [
- # ensure that start_date <= end_date
- {
- 'name': 'less_equal',
- 'arguments': ['start_date', 'end_date'],
- 'message': 'End date cannot be before start date',
- # this is where the error message is shown
- 'container': 'end_date',
- },
- ],
- # link to the scheduler; this example links to an Airflow pipeline
- # that uses the query id and the output table as its name
- 'linkback': (
- 'https://airflow.example.com/admin/airflow/tree?'
- 'dag_id=query_${id}_${extra_json.schedule_info.output_table}'
- ),
},
+ 'UISCHEMA': {
+ 'schedule_interval': {
+ 'ui:placeholder': '@daily, @weekly, etc.',
+ },
+ 'dependencies': {
+ 'ui:help': (
+ 'Check the documentation for the correct format when '
+ 'defining dependencies.'
+ ),
+ },
+ },
+ 'VALIDATION': [
+ # ensure that start_date <= end_date
+ {
+ 'name': 'less_equal',
+ 'arguments': ['start_date', 'end_date'],
+ 'message': 'End date cannot be before start date',
+ # this is where the error message is shown
+ 'container': 'end_date',
+ },
+ ],
+ # link to the scheduler; this example links to an Airflow pipeline
+ # that uses the query id and the output table as its name
+ 'linkback': (
+ 'https://airflow.example.com/admin/airflow/tree?'
+ 'dag_id=query_${id}_${extra_json.schedule_info.output_table}'
+ ),
}
```
-This feature flag is based on
+This configuration is based on
[react-jsonschema-form](https://github.com/mozilla-services/react-jsonschema-form) and will add a
-button called “Schedule Query” to SQL Lab. When the button is clicked, a modal will show up where
+menu item called “Schedule” to SQL Lab. When the menu item is clicked, a modal will show up where
the user can add the metadata required for scheduling the query.
This information can then be retrieved from the endpoint `/savedqueryviewapi/api/read` and used to
diff --git a/docs/docs/installation/cache.mdx b/docs/docs/installation/cache.mdx
index aaa8327451b8..58b4bcb2b0b7 100644
--- a/docs/docs/installation/cache.mdx
+++ b/docs/docs/installation/cache.mdx
@@ -7,19 +7,49 @@ version: 1
## Caching
-Superset uses [Flask-Caching](https://flask-caching.readthedocs.io/) for caching purposes. Configuring caching is as easy as providing a custom cache config in your
-`superset_config.py` that complies with [the Flask-Caching specifications](https://flask-caching.readthedocs.io/en/latest/#configuring-flask-caching).
-Flask-Caching supports various caching backends, including Redis, Memcached, SimpleCache (in-memory), or the
-local filesystem. Custom cache backends are also supported. See [here](https://flask-caching.readthedocs.io/en/latest/#custom-cache-backends) for specifics.
-The following cache configurations can be customized:
-- Metadata cache (optional): `CACHE_CONFIG`
-- Charting data queried from datasets (optional): `DATA_CACHE_CONFIG`
-- SQL Lab query results (optional): `RESULTS_BACKEND`. See [Async Queries via Celery](/docs/installation/async-queries-celery) for details
+Superset uses [Flask-Caching](https://flask-caching.readthedocs.io/) for caching purposes.
+Flask-Caching supports various caching backends, including Redis (recommended), Memcached,
+SimpleCache (in-memory), or the local filesystem.
+[Custom cache backends](https://flask-caching.readthedocs.io/en/latest/#custom-cache-backends)
+are also supported.
+
+Caching can be configured by providing a dictionaries in
+`superset_config.py` that comply with[the Flask-Caching config specifications](https://flask-caching.readthedocs.io/en/latest/#configuring-flask-caching).
+
+The following cache configurations can be customized in this way:
- Dashboard filter state (required): `FILTER_STATE_CACHE_CONFIG`.
- Explore chart form data (required): `EXPLORE_FORM_DATA_CACHE_CONFIG`
+- Metadata cache (optional): `CACHE_CONFIG`
+- Charting data queried from datasets (optional): `DATA_CACHE_CONFIG`
+
+For example, to configure the filter state cache using redis:
+
+```python
+FILTER_STATE_CACHE_CONFIG = {
+ 'CACHE_TYPE': 'RedisCache',
+ 'CACHE_DEFAULT_TIMEOUT': 86400,
+ 'CACHE_KEY_PREFIX': 'superset_filter_cache',
+ 'CACHE_REDIS_URL': 'redis://localhost:6379/0'
+}
+```
+
+### Dependencies
+
+In order to use dedicated cache stores, additional python libraries must be installed
+
+- For Redis: we recommend the [redis](https://pypi.python.org/pypi/redis) Python package
+- Memcached: we recommend using [pylibmc](https://pypi.org/project/pylibmc/) client library as
+ `python-memcached` does not handle storing binary data correctly.
+
+These libraries can be installed using pip.
+
+### Fallback Metastore Cache
+
+Note, that some form of Filter State and Explore caching are required. If either of these caches
+are undefined, Superset falls back to using a built-in cache that stores data in the metadata
+database. While it is recommended to use a dedicated cache, the built-in cache can also be used
+to cache other data.
-Please note, that Dashboard and Explore caching is required. If these caches are undefined, Superset falls back to using a built-in cache that stores data
-in the metadata database. While it is recommended to use a dedicated cache, the built-in cache can also be used to cache other data.
For example, to use the built-in cache to store chart data, use the following config:
```python
@@ -30,21 +60,25 @@ DATA_CACHE_CONFIG = {
}
```
-- Redis (recommended): we recommend the [redis](https://pypi.python.org/pypi/redis) Python package
-- Memcached: we recommend using [pylibmc](https://pypi.org/project/pylibmc/) client library as
- `python-memcached` does not handle storing binary data correctly.
+### Chart Cache Timeout
-Both of these libraries can be installed using pip.
+The cache timeout for charts may be overridden by the settings for an individual chart, dataset, or
+database. Each of these configurations will be checked in order before falling back to the default
+value defined in `DATA_CACHE_CONFIG.
-For chart data, Superset goes up a “timeout search path”, from a slice's configuration
-to the datasource’s, the database’s, then ultimately falls back to the global default
-defined in `DATA_CACHE_CONFIG`.
+### SQL Lab Query Results
-## Celery beat
+Caching for SQL Lab query results is used when async queries are enabled and is configured using
+`RESULTS_BACKEND`.
+
+Note that this configuration does not use a flask-caching dictionary for its configuration, but
+instead requires a cachelib object.
+
+See [Async Queries via Celery](/docs/installation/async-queries-celery) for details.
### Caching Thumbnails
-This is an optional feature that can be turned on by activating it’s feature flag on config:
+This is an optional feature that can be turned on by activating it’s [feature flag](https://superset.apache.org/docs/installation/configuring-superset#feature-flags) on config:
```
FEATURE_FLAGS = {
@@ -53,6 +87,13 @@ FEATURE_FLAGS = {
}
```
+By default thumbnails are rendered using the `THUMBNAIL_SELENIUM_USER` user account. To render thumbnails as the
+logged in user (e.g. in environments that are using user impersonation), use the following configuration:
+
+```python
+THUMBNAIL_EXECUTE_AS = [ExecutorType.CURRENT_USER]
+```
+
For this feature you will need a cache system and celery workers. All thumbnails are stored on cache
and are processed asynchronously by the workers.
diff --git a/docs/docs/installation/configuring-superset.mdx b/docs/docs/installation/configuring-superset.mdx
index 05f845c114ec..aefc12d60306 100644
--- a/docs/docs/installation/configuring-superset.mdx
+++ b/docs/docs/installation/configuring-superset.mdx
@@ -149,7 +149,11 @@ Make sure the pip package [`Authlib`](https://authlib.org/) is installed on the
First, configure authorization in Superset `superset_config.py`.
```python
+from flask_appbuilder.security.manager import AUTH_OAUTH
+
+# Set the authentication type to OAuth
AUTH_TYPE = AUTH_OAUTH
+
OAUTH_PROVIDERS = [
{ 'name':'egaSSO',
'token_key':'access_token', # Name of the token in the response of access_token_url
diff --git a/docs/docs/installation/event-logging.mdx b/docs/docs/installation/event-logging.mdx
index 7b9bba1de4e6..2cb35d5047dc 100644
--- a/docs/docs/installation/event-logging.mdx
+++ b/docs/docs/installation/event-logging.mdx
@@ -9,9 +9,11 @@ version: 1
### Event Logging
-Superset by default logs special action events in its internal database. These logs can be accessed
+Superset by default logs special action events in its internal database (DBEventLogger). These logs can be accessed
on the UI by navigating to **Security > Action Log**. You can freely customize these logs by
implementing your own event log class.
+**When custom log class is enabled DBEventLogger is disabled and logs stop being populated in UI logs view.**
+To achieve both, custom log class should extend built-in DBEventLogger log class.
Here's an example of a simple JSON-to-stdout class:
diff --git a/docs/docs/installation/installing-superset-from-scratch.mdx b/docs/docs/installation/installing-superset-from-scratch.mdx
index 3a12c9db3ac1..b15ccb315748 100644
--- a/docs/docs/installation/installing-superset-from-scratch.mdx
+++ b/docs/docs/installation/installing-superset-from-scratch.mdx
@@ -64,7 +64,7 @@ We don't recommend using the system installed Python. Instead, first install the
brew install readline pkg-config libffi openssl mysql postgres
```
-You should install a recent version of Python (the official docker image uses 3.8.12). We'd recommend using a Python version manager like [pyenv](https://github.com/pyenv/pyenv) (and also [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv)).
+You should install a recent version of Python (the official docker image uses 3.8.16). We'd recommend using a Python version manager like [pyenv](https://github.com/pyenv/pyenv) (and also [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv)).
Let's also make sure we have the latest version of `pip` and `setuptools`:
diff --git a/docs/docs/installation/installing-superset-using-docker-compose.mdx b/docs/docs/installation/installing-superset-using-docker-compose.mdx
index 89ed9f1d63e5..ae53085947a7 100644
--- a/docs/docs/installation/installing-superset-using-docker-compose.mdx
+++ b/docs/docs/installation/installing-superset-using-docker-compose.mdx
@@ -84,9 +84,11 @@ and wait for the `superset_node` container to finish building the assets.
#### Configuring Docker Compose
-The following is for users who want to configure how Superset starts up in Docker Compose; otherwise, you can skip to the next section.
+The following is for users who want to configure how Superset runs in Docker Compose; otherwise, you can skip to the next section.
-You can configure the Docker Compose settings for dev and non-dev mode with `docker/.env` and `docker/.env-non-dev` respectively. These environment files set the environment for most containers in the Docker Compose setup, and some variables affect multiple containers and others only single ones.
+You can install additional python packages and apply config overrides by following the steps mentioned in [docker/README.md](https://github.com/apache/superset/tree/master/docker#configuration)
+
+You can configure the Docker Compose environment varirables for dev and non-dev mode with `docker/.env` and `docker/.env-non-dev` respectively. These environment files set the environment for most containers in the Docker Compose setup, and some variables affect multiple containers and others only single ones.
One important variable is `SUPERSET_LOAD_EXAMPLES` which determines whether the `superset_init` container will load example data and visualizations into the database and Superset. These examples are quite helpful for most people, but probably unnecessary for experienced users. The loading process can sometimes take a few minutes and a good amount of CPU, so you may want to disable it on a resource-constrained device.
@@ -116,4 +118,4 @@ When running Superset using `docker` or `docker-compose` it runs in its own dock
Here the instructions are for connecting to postgresql (which is running on your host machine) from Superset (which is running in its docker container). Other databases may have slightly different configurations but gist would be same and boils down to 2 steps -
1. **(Mac users may skip this step)** Configuring the local postgresql/database instance to accept public incoming connections. By default postgresql only allows incoming connections from `localhost` only, but re-iterating once again, `localhosts` are different for host machine and docker container. For postgresql this involves make one-line changes to the files `postgresql.conf` and `pg_hba.conf`, you can find helpful links tailored to your OS / PG version on the web easily for this task. For docker it suffices to only whitelist IPs `172.0.0.0/8` instead of `*`, but in any case you are _warned_ that doing this in a production database _may_ have disastrous consequences as you are opening your database to the public internet.
-2. Instead of `localhost`, try using `host.docker.internal` (Mac users) or `172.18.0.1` (Linux users) as the host name when attempting to connect to the database. This is docker internal detail, what is happening is that in Mac systems docker creates a dns entry for the host name `host.docker.internal` which resolves to the correct address for the host machine, whereas in linux this is not the case (at least by default). If neither of these 2 hostnames work then you may want to find the exact host name you want to use, for that you can do `ifconfig` or `ip addr show` and look at the IP address of `docker0` interface that must have been created by docker for you. Alternately if you don't even see the `docker0` interface try (if needed with sudo) `docker network inspect bridge` and see if there is an entry for `"Gateway"` and note the IP address.
+2. Instead of `localhost`, try using `host.docker.internal` (Mac users, Ubuntu) or `172.18.0.1` (Linux users) as the host name when attempting to connect to the database. This is docker internal detail, what is happening is that in Mac systems docker creates a dns entry for the host name `host.docker.internal` which resolves to the correct address for the host machine, whereas in linux this is not the case (at least by default). If neither of these 2 hostnames work then you may want to find the exact host name you want to use, for that you can do `ifconfig` or `ip addr show` and look at the IP address of `docker0` interface that must have been created by docker for you. Alternately if you don't even see the `docker0` interface try (if needed with sudo) `docker network inspect bridge` and see if there is an entry for `"Gateway"` and note the IP address.
diff --git a/docs/docs/installation/running-on-kubernetes.mdx b/docs/docs/installation/running-on-kubernetes.mdx
index af7618751708..61fa84721bf1 100644
--- a/docs/docs/installation/running-on-kubernetes.mdx
+++ b/docs/docs/installation/running-on-kubernetes.mdx
@@ -63,7 +63,7 @@ superset-worker-75b48bbcc-qrq49 1/1 Running 0 4m12s
The exact list will depend on some of your specific configuration overrides but you should generally expect:
-- N `superset-xxxx-yyyy` and `superset-worker-xxxx-yyyy` pods (depending on your `replicaCount` value)
+- N `superset-xxxx-yyyy` and `superset-worker-xxxx-yyyy` pods (depending on your `supersetNode.replicaCount` and `supersetWorker.replicaCount` values)
- 1 `superset-postgresql-0` depending on your postgres settings
- 1 `superset-redis-master-0` depending on your redis settings
- 1 `superset-celerybeat-xxxx-yyyy` pod if you have `supersetCeleryBeat.enabled = true` in your values overrides
@@ -123,16 +123,27 @@ init:
#### Dependencies
-Install additional packages and do any other bootstrap configuration in this script. For production clusters it's
-recommended to build own image with this step done in CI. The following example installs the Big Query and Elasticsearch
-database drivers so that you can connect to those datasources in your Superset installation.
+Install additional packages and do any other bootstrap configuration in the bootstrap script.
+For production clusters it's recommended to build own image with this step done in CI.
+
+:::note
+
+Superset requires a Python DB-API database driver and a SQLAlchemy
+dialect to be installed for each datastore you want to connect to.
+
+See [Install Database Drivers](/docs/databases/installing-database-drivers) for more information
+
+:::
+
+The following example installs the Big Query and Elasticsearch database drivers so that you can
+connect to those datasources in your Superset installation:
```yaml
bootstrapScript: |
#!/bin/bash
pip install psycopg2==2.9.1 \
redis==3.2.1 \
- pybigquery==2.26.0 \
+ sqlalchemy-bigquery==1.5.0 \
elasticsearch-dbapi==0.2.5 &&\
if [ ! -f ~/bootstrap ]; then echo "Running Superset with uid {{ .Values.runAsUser }}" > ~/bootstrap; fi
```
@@ -226,6 +237,14 @@ Those will also be mounted as secrets and can include sensitive parameters.
#### Setting up OAuth
+:::note
+
+OAuth setup requires that the [authlib](https://authlib.org/) Python library is installed. This can
+be done using `pip` by updating the `bootstrapScript`. See the [Dependencies](#dependencies) section
+for more information.
+
+:::
+
```yaml
extraEnv:
AUTH_DOMAIN: example.com
@@ -239,7 +258,7 @@ configOverrides:
# This will make sure the redirect_uri is properly computed, even with SSL offloading
ENABLE_PROXY_FIX = True
- from flask_appbuilder.security.manager import (AUTH_OAUTH, AUTH_DB)
+ from flask_appbuilder.security.manager import AUTH_OAUTH
AUTH_TYPE = AUTH_OAUTH
OAUTH_PROVIDERS = [
{
diff --git a/docs/docs/installation/sql-templating.mdx b/docs/docs/installation/sql-templating.mdx
index 09373d8999d0..72c2c0a9adb7 100644
--- a/docs/docs/installation/sql-templating.mdx
+++ b/docs/docs/installation/sql-templating.mdx
@@ -10,7 +10,7 @@ version: 1
### Jinja Templates
SQL Lab and Explore supports [Jinja templating](https://jinja.palletsprojects.com/en/2.11.x/) in queries.
-To enable templating, the `ENABLE_TEMPLATE_PROCESSING` feature flag needs to be enabled in
+To enable templating, the `ENABLE_TEMPLATE_PROCESSING` [feature flag](https://superset.apache.org/docs/installation/configuring-superset#feature-flags) needs to be enabled in
`superset_config.py`. When templating is enabled, python code can be embedded in virtual datasets and
in Custom SQL in the filter and metric controls in Explore. By default, the following variables are
made available in the Jinja context:
@@ -298,7 +298,7 @@ Here's a concrete example:
It's possible to query physical and virtual datasets using the `dataset` macro. This is useful if you've defined computed columns and metrics on your datasets, and want to reuse the definition in adhoc SQL Lab queries.
-To use the macro, first you need to find the ID of the dataset. This can be done by going to the view showing all the datasets, hovering over the dataset you're interested in, and looking at its URL. For example, if the URL for a dataset is https://superset.example.org/superset/explore/table/42/ its ID is 42.
+To use the macro, first you need to find the ID of the dataset. This can be done by going to the view showing all the datasets, hovering over the dataset you're interested in, and looking at its URL. For example, if the URL for a dataset is https://superset.example.org/explore/?dataset_type=table&dataset_id=42 its ID is 42.
Once you have the ID you can query it as if it were a table:
diff --git a/docs/docs/intro.mdx b/docs/docs/intro.mdx
index 77ff12df83e7..2d2de074aec3 100644
--- a/docs/docs/intro.mdx
+++ b/docs/docs/intro.mdx
@@ -30,7 +30,7 @@ Superset provides:
- A lightweight semantic layer which empowers data analysts to quickly define custom dimensions and metrics
- Out-of-the-box support for most SQL-speaking databases
- Seamless, in-memory asynchronous caching and queries
-- An extensible security model that allows configuration of very intricate rules on on who can access which product features and datasets.
+- An extensible security model that allows configuration of very intricate rules on who can access which product features and datasets.
- Integration with major authentication backends (database, OpenID, LDAP, OAuth, REMOTE_USER, etc)
- The ability to add custom visualization plugins
- An API for programmatic customization
diff --git a/docs/docs/miscellaneous/country-map-tools.mdx b/docs/docs/miscellaneous/country-map-tools.mdx
index 5e490b2057f4..20d1dbe22c4f 100644
--- a/docs/docs/miscellaneous/country-map-tools.mdx
+++ b/docs/docs/miscellaneous/country-map-tools.mdx
@@ -43,6 +43,7 @@ The Country Maps visualization already ships with the maps for the following cou
- Syria
- Thailand
- Timorleste
+- Turkey
- UK
- Ukraine
- Uruguay
diff --git a/docs/docs/security.mdx b/docs/docs/security.mdx
index 283e48d9b058..e868de6a99af 100644
--- a/docs/docs/security.mdx
+++ b/docs/docs/security.mdx
@@ -153,6 +153,43 @@ of a policy and if it's not able to find one, it will issue a warning with the s
where CSP policies are defined outside of Superset using other software, administrators can disable
the warning using the `CONTENT_SECURITY_POLICY_WARNING` key in `config.py`.
+#### CSP Requirements
+
+* Superset needs both the `'unsafe-eval'` and `'unsafe-inline'` CSP keywords in order to operate.
+
+ ```
+ default-src 'self' 'unsafe-eval' 'unsafe-inline'
+ ```
+
+* Some dashbaords load images using data URIs and require `data:` in their `img-src`
+
+ ```
+ img-src 'self' data:
+ ```
+
+* MapBox charts use workers and need to connect to MapBox servers in addition to the Superset origin
+
+ ```
+ worker-src 'self' blob:
+ connect-src 'self' https://api.mapbox.com https://events.mapbox.com
+ ```
+
+This is a basic example `TALISMAN_CONFIG` that implements the above requirements, uses `'self'` to
+limit content to the same origin as the Superset server, and disallows outdated HTML elements by
+setting `object-src` to `'none'`.
+
+```python
+TALISMAN_CONFIG = {
+ "content_security_policy": {
+ "default-src": ["'self'", "'unsafe-inline'", "'unsafe-eval'"],
+ "img-src": ["'self'", "data:"],
+ "worker-src": ["'self'", "blob:"],
+ "connect-src": ["'self'", "https://api.mapbox.com", "https://events.mapbox.com"],
+ "object-src": "'none'",
+ }
+}
+```
+
### Reporting Security Vulnerabilities
Apache Software Foundation takes a rigorous standpoint in annihilating the security issues in its
diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js
index 7c86ff067cd0..e6121cca9348 100644
--- a/docs/docusaurus.config.js
+++ b/docs/docusaurus.config.js
@@ -37,11 +37,14 @@ const config = {
projectName: 'superset', // Usually your repo name.
themes: ['@saucelabs/theme-github-codeblock'],
plugins: [
- ["docusaurus-plugin-less", {
- lessOptions: {
- javascriptEnabled: true,
- }
- }],
+ [
+ 'docusaurus-plugin-less',
+ {
+ lessOptions: {
+ javascriptEnabled: true,
+ },
+ },
+ ],
[
'@docusaurus/plugin-client-redirects',
{
@@ -185,10 +188,6 @@ const config = {
label: 'Getting Started',
to: '/docs/intro',
},
- {
- label: 'Tutorial',
- to: '/docs/intro',
- },
{
label: 'FAQ',
to: '/docs/frequently-asked-questions',
@@ -208,7 +207,7 @@ const config = {
},
{
label: 'Slack',
- href: 'https://join.slack.com/t/apache-superset/shared_invite/zt-16jvzmoi8-sI7jKWp~xc2zYRe~NqiY9Q',
+ href: 'http://bit.ly/join-superset-slack',
},
{
label: 'Mailing List',
@@ -229,8 +228,7 @@ const config = {
},
footer: {
style: 'dark',
- links: [
- ],
+ links: [],
copyright: `Copyright © ${new Date().getFullYear()},
The Apache Software Foundation,
Licensed under the Apache License.
@@ -249,6 +247,7 @@ const config = {
darkTheme: darkCodeTheme,
},
}),
+ scripts: ['/script/matomo.js'],
};
module.exports = config;
diff --git a/docs/src/pages/community.tsx b/docs/src/pages/community.tsx
index 1cd9830dbf26..52d8bb33064a 100644
--- a/docs/src/pages/community.tsx
+++ b/docs/src/pages/community.tsx
@@ -23,7 +23,7 @@ import Layout from '@theme/Layout';
const links = [
[
- 'https://join.slack.com/t/apache-superset/shared_invite/zt-16jvzmoi8-sI7jKWp~xc2zYRe~NqiY9Q',
+ 'http://bit.ly/join-superset-slack',
'Slack',
'interact with other Superset users and community members',
],
@@ -37,6 +37,11 @@ const links = [
'dev@ Mailing List',
'participate in conversations with committers and contributors',
],
+ [
+ 'https://calendar.google.com/calendar/u/2?cid=c3VwZXJzZXQuY29tbWl0dGVyc0BnbWFpbC5jb20',
+ 'Superset Community Calendar',
+ 'join us for working group sessions and other community gatherings',
+ ],
[
'https://stackoverflow.com/questions/tagged/superset+apache-superset',
'Stack Overflow',
diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx
index d57225a0d797..f3781a4039cc 100644
--- a/docs/src/pages/index.tsx
+++ b/docs/src/pages/index.tsx
@@ -249,6 +249,15 @@ const CarouselSection = styled('div')`
}
`;
+const StyledCredits = styled.div`
+ width: 100%;
+ height: 60px;
+ padding: 18px;
+ background-color: #282E4A;
+ text-align: center;
+ color: #FFFFFF;
+`;
+
const StyledDatabaseImg = styled.img`
width: ${(props) => props.width};
height: ${(props) => props.height};
@@ -427,13 +436,13 @@ export default function Home(): JSX.Element {
-
+
-
+
-
+
@@ -461,8 +470,13 @@ export default function Home(): JSX.Element {
-
+
+ We use{' '}
+
+
+
+
);
}
diff --git a/docs/src/resources/data.js b/docs/src/resources/data.js
index 08d0781f8696..49bc554a4dfe 100644
--- a/docs/src/resources/data.js
+++ b/docs/src/resources/data.js
@@ -48,6 +48,11 @@ export const Databases = [
href: 'https://dremio.com/',
imgName: 'dremio.png',
},
+ {
+ title: 'Databricks',
+ href: 'https://www.databricks.com',
+ imgName: 'databricks.png',
+ },
{
title: 'Exasol',
href: 'https://www.exasol.com/en/',
@@ -138,6 +143,11 @@ export const Databases = [
href: "www.teradata.com",
imgName: 'teradata.png'
},
+ {
+ title: 'TimescaleDB',
+ href: "www.timescale.com",
+ imgName: 'timescale.png'
+ },
{
title: 'YugabyteDB',
href: "www.yugabyte.com",
diff --git a/docs/static/img/applitools.png b/docs/static/img/applitools.png
new file mode 100644
index 0000000000000000000000000000000000000000..66b7b1eb4f375844752a77016c81a62aa12d6125
GIT binary patch
literal 3658
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