You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by hu...@apache.org on 2023/04/06 15:28:27 UTC

[superset] branch chart-ds-constraint updated (564ae4ab37 -> 5afaf6e432)

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

hugh pushed a change to branch chart-ds-constraint
in repository https://gitbox.apache.org/repos/asf/superset.git


    from 564ae4ab37 add migration
     new 4d673a6cf0 lit
     add 21578f74b7 chore: Changes the inputs of native filters modal to have the same width (#23477)
     add a3ffc67238 docs: Adds notes to Superset plugin generator about TypeScript errors (#23501)
     add 0cebe8bf18 fix(legacy-plugin-chart-heatmap): fix adhoc column tooltip (#23507)
     add 8db5cb18c0 fix(generic-x-axis): skip initial time filter for legacy charts (#23506)
     add 439d687e1f fix(dashboard): Add remark plugin on markdown (#23502)
     add 80d1e4ffa3 fix: Preserves selected scopes when toggling between scope types (#23475)
     add 5d910aa2e2 fix(plugin-chart-table): Invalid d3Formatter on String column (#23515)
     add 542bf25729 fix(dashboards): apply tag filter correctly (#23521)
     add 9fbfd1c1d8 feat: Implement context menu for drill by (#23454)
     add 4220d32f3d fix: Dashboard not loading with default first value in filter (#23512)
     add 97b5cdd588 feat: drill by modal (#23458)
     add f2be53dd53 chore: Migrate /superset/favstar to API v1 (#23165)
     add de42c11f99 fix(plugin-generator): Addresses linter errors in newly generated Superset plugin (#23513)
     add 41ad9442c0 fix(word cloud): series label format fixed for custom sql queries (#23517)
     add 63751c6c0f chore: Adds a tooltip to pre-filter in native filters modal (#23481)
     add ce3ba67cf6 fix(conditional formatting): controls looses on save (#23137)
     add 81b32d1045 chore: allow logs to show error levels for ssh tunnel (#23536)
     add 068163e2a1 fix(tags): convert postgres enum type to varchar (#23526)
     add 330e79bc5d ci: disable flaky async test (#23527)
     add db9ca20737 fix(area chart legacy): tool tip shows actual value rather than y axi… (#23469)
     add f6b5b658e5 chore(welcome): harmonize submenu with other routes (#22803)
     add 500d90058f feat: add ability to disable cache (#23439)
     add 09757dc518 fix: moved alerts and reports default values to config (#22880)
     add bc2ec044b8 feat(cross-filters): using verbose map in applied cross-filters (#23509)
     add ee9ef24509 perf(sqla): avoid unnecessary type check on adhoc column (#23491)
     add 1ced7cdbbb fix: Removes Redux state mutations - iteration 1 (#23522)
     add b52efe0599 fix(sqllab): dedupe table_schemas in active_tab (#23514)
     add a18e33b3bc fix: Hide FilterBar for Reports (#23543)
     add bd0609df58 fix(sqllab): undefined issue_codes on query error (#23549)
     add 13ffb4b7c2 fix(plugin-chart-table): Include time control (#23533)
     add cdc7af11bf chore: Migrate /superset/user_slices and /superset/fave_slices to API v1 (#22964)
     add 3bc496040d fix: Filter values are not updating when dependencies are set (#23566)
     add 95db6c04aa fix: Add default empty array to filter dependencies (#23565)
     add 4452a65095 feat: drill by display chart (#23524)
     add d966db61af feat: Add metadata bar to drill by modal (#23542)
     add a4d4084d08 fix: tags features flag on base models (#23548)
     add 08375ca31a chore: Remove wrong information from the Alerts & Reports docs (#23544)
     add 61e71bb455 fix: QueryParamProvider error on backend rendered views (#23567)
     add 9d2f43d312 fix(dashboard): Cross filters badge for cols with verbose names (#23576)
     add 117360cd57 feat: Drill by open in Explore (#23575)
     add 3cff2b0a58 fix: Removes Redux state mutations - iteration 2 (#23535)
     add b58d17f4b8 fix(revert): "fix: cache warmup solution non legacy charts. (#23012)" (#23579)
     add 6daca46782 build(deps-dev): bump prettier from 2.8.6 to 2.8.7 in /superset-websocket (#23496)
     add 3d7a5d282d build(deps): bump pre-commit from 3.2.0 to 3.2.2 in /requirements (#23571)
     add cd498c18ba build(deps-dev): bump @types/node from 18.15.5 to 18.15.11 in /superset-websocket (#23518)
     add e8cfb31bff fix: Ensure the reporting framework handles charts with no data (#23585)
     add 7a1aa6387c feat(bigquery): `get_catalog_names` (#23461)
     add 70344018b6 fix(dash import): Ensure old datasource ids are not referenced in imported charts (#23582)
     add 5530daa0ce build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.55.0 to 5.57.1 in /superset-websocket (#23573)
     add f0237a5b75 fix(translation): correct translation errors for Chinese(zh) (#23129)
     add 8f4ed7014d fix(docker-compose): Make worker use correct healthcheck (#23455) (#23587)
     add 56dcf25cf8 feat(helm): Upgrade default Superset version to 2.1.0 (#23594)
     add c5eecc7cc2 docs(security): more context around Talisman, note side effect of force_https on Alerts & Reports (#23537)
     add adcb8cf0ac refactor: Moves CRUD features to src/features (#23482)
     add 30f210b842 feat: Enables ECharts legend selector (#23590)
     add bccd2670cc feat: Shows user charts by default when editing a dashboard (#23547)
     new 237e2ecb1e Merge branch 'master' of https://github.com/apache/superset into chart-ds-constraint
     new 5afaf6e432 update table name

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 docker-compose-non-dev.yml                         |   2 +-
 docker-compose.yml                                 |   2 +-
 docs/docs/installation/alerts-reports.mdx          |   4 +-
 docs/docs/installation/cache.mdx                   |   3 +
 docs/docs/security.mdx                             |  29 +-
 docs/static/resources/openapi.json                 |  30 ++
 helm/superset/Chart.yaml                           |   4 +-
 helm/superset/README.md                            |   2 +-
 helm/superset/values.yaml                          |   4 -
 requirements/integration.txt                       |   2 +-
 .../cypress/integration/chart_list/list.test.ts    |   8 +-
 .../cypress/integration/dashboard/editmode.test.ts |   2 +-
 .../integration/dashboard/nativeFilters.test.ts    |  11 +-
 .../cypress/integration/dashboard/utils.ts         |   9 +-
 superset-frontend/jest.config.js                   |   3 +
 superset-frontend/package-lock.json                | 562 +++++++++++++++++++++
 .../generators/plugin-chart/templates/README.erb   |  25 +
 .../generators/plugin-chart/templates/package.erb  |   2 +-
 .../plugin-chart/templates/src/MyChart.erb         |  11 +-
 .../templates/src/plugin/controlPanel.erb          |   6 +-
 .../plugin-chart/templates/src/types.erb           |   6 +-
 .../templates/test/plugin/transformProps.test.erb  |   3 +-
 .../src/shared-controls/mixins.tsx                 |   4 +-
 .../packages/superset-ui-core/package.json         |   1 +
 .../superset-ui-core/src/chart/types/Base.ts       |   6 +
 .../src/components/SafeMarkdown.tsx                |   7 +-
 .../src/query/extractQueryFields.ts                |   3 +-
 .../superset-ui-core/src/query/types/Filter.ts     |  12 +-
 .../legacy-plugin-chart-heatmap/src/Heatmap.js     |  15 +-
 .../legacy-plugin-chart-world-map/src/WorldMap.js  |   9 +
 .../legacy-plugin-chart-world-map/src/index.js     |   6 +-
 .../plugins/legacy-preset-chart-nvd3/src/utils.js  |   2 +-
 .../plugin-chart-echarts/src/BoxPlot/index.ts      |   8 +-
 .../plugin-chart-echarts/src/Funnel/index.ts       |   6 +-
 .../src/Funnel/transformProps.ts                   |   2 +-
 .../plugin-chart-echarts/src/Gauge/index.ts        |   6 +-
 .../src/Graph/EchartsGraph.tsx                     |  11 +-
 .../plugin-chart-echarts/src/Graph/index.ts        |   6 +-
 .../src/Graph/transformProps.ts                    |   3 +-
 .../src/MixedTimeseries/EchartsMixedTimeseries.tsx |  68 +--
 .../src/MixedTimeseries/index.ts                   |   6 +-
 .../src/MixedTimeseries/transformProps.ts          |   8 +-
 .../plugins/plugin-chart-echarts/src/Pie/index.ts  |   6 +-
 .../plugin-chart-echarts/src/Pie/transformProps.ts |   2 +-
 .../plugin-chart-echarts/src/Radar/index.ts        |   6 +-
 .../src/Radar/transformProps.ts                    |   2 +-
 .../src/Sunburst/EchartsSunburst.tsx               |  10 +-
 .../plugin-chart-echarts/src/Sunburst/index.ts     |   8 +-
 .../src/Timeseries/Area/index.ts                   |   6 +-
 .../src/Timeseries/EchartsTimeseries.tsx           |  60 ++-
 .../src/Timeseries/Regular/Bar/index.ts            |   6 +-
 .../src/Timeseries/Regular/Line/index.ts           |   6 +-
 .../src/Timeseries/Regular/Scatter/index.ts        |   6 +-
 .../src/Timeseries/Regular/SmoothLine/index.ts     |   6 +-
 .../src/Timeseries/Step/index.ts                   |   6 +-
 .../plugin-chart-echarts/src/Timeseries/index.ts   |   6 +-
 .../src/Timeseries/transformProps.ts               |   8 +-
 .../src/Treemap/EchartsTreemap.tsx                 |  16 +-
 .../plugin-chart-echarts/src/Treemap/index.ts      |   6 +-
 .../src/utils/eventHandlers.ts                     |   7 +-
 .../plugin-chart-echarts/src/utils/series.ts       |   9 +
 .../plugin-chart-echarts/test/utils/series.test.ts |  58 ++-
 .../src/PivotTableChart.tsx                        |  19 +-
 .../src/plugin/controlPanel.tsx                    |   4 +-
 .../plugin-chart-pivot-table/src/plugin/index.ts   |  10 +-
 .../plugins/plugin-chart-table/src/TableChart.tsx  |  12 +
 .../plugin-chart-table/src/controlPanel.tsx        |  32 +-
 .../plugins/plugin-chart-table/src/index.ts        |   8 +-
 .../plugin-chart-table/src/transformProps.ts       |   3 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |   1 +
 .../plugins/plugin-chart-table/test/testData.ts    |  14 +
 .../src/legacyPlugin/transformProps.ts             |   7 +-
 .../src/legacyPlugin/types.ts                      |   4 +-
 .../plugins/plugin-chart-word-cloud/src/types.ts   |   4 +-
 .../spec/fixtures/mockChartQueries.js              |   1 +
 superset-frontend/src/SqlLab/App.jsx               |   8 +-
 superset-frontend/src/SqlLab/actions/sqlLab.js     |   6 +-
 .../SqlLab/components/ShareSqlLabQuery/index.tsx   |   4 +-
 .../src/SqlLab/components/SouthPane/index.tsx      |   4 +-
 .../src/SqlLab/components/SqlEditor/index.jsx      |   4 +-
 .../SqlLab/components/TabbedSqlEditors/index.jsx   |   4 +-
 .../src/SqlLab/reducers/getInitialState.js         |  20 +-
 .../src/SqlLab/reducers/getInitialState.test.ts    |  54 ++
 superset-frontend/src/components/Chart/Chart.jsx   |  11 +-
 .../src/components/Chart/ChartContextMenu.tsx      |  30 +-
 .../components/Chart/DrillBy/DrillByChart.test.tsx |  70 +++
 .../src/components/Chart/DrillBy/DrillByChart.tsx  |  62 +++
 .../Chart/DrillBy/DrillByMenuItems.test.tsx        | 186 +++++++
 .../components/Chart/DrillBy/DrillByMenuItems.tsx  | 258 ++++++++++
 .../components/Chart/DrillBy/DrillByModal.test.tsx | 146 ++++++
 .../src/components/Chart/DrillBy/DrillByModal.tsx  | 182 +++++++
 .../Chart/DrillDetail/DrillDetailMenuItems.tsx     |  34 +-
 .../Chart/DrillDetail/DrillDetailPane.test.tsx     |  16 +-
 .../Chart/DrillDetail/DrillDetailPane.tsx          |   5 +-
 .../src/components/Chart/DrillDetail/types.ts      |  19 -
 .../components/Chart/MenuItemWithTruncation.tsx    |  59 +++
 .../src/components/Chart/chartAction.js            |   4 +-
 .../src/components/Chart/chartReducer.ts           |   4 +-
 .../components/Chart/{DrillDetail => }/types.ts    |   8 -
 .../src/components/Chart/utils.test.ts             |   3 +
 superset-frontend/src/components/Chart/utils.ts    |  38 +-
 .../Datasource/ChangeDatasourceModal.tsx           |   2 +-
 .../src/components/Datasource/DatasourceEditor.jsx |  12 +-
 .../src/components/Datasource/DatasourceModal.tsx  |   8 +-
 .../src/components/DynamicPlugins/index.tsx        |   3 +-
 .../src/components/FaveStar/FaveStar.test.tsx      |   4 +-
 .../src/components/FaveStar/index.tsx              |  12 +-
 .../ReportModal/HeaderReportDropdown/index.tsx     |   2 +-
 superset-frontend/src/components/Select/Select.tsx |  23 +-
 superset-frontend/src/components/Select/types.ts   |   5 +
 .../src/dashboard/actions/dashboardState.js        |  25 +-
 superset-frontend/src/dashboard/actions/hydrate.js |   4 +-
 .../src/dashboard/actions/nativeFilters.ts         |  23 +-
 .../src/dashboard/actions/sliceEntities.js         | 173 -------
 .../src/dashboard/actions/sliceEntities.test.js    | 102 ----
 .../src/dashboard/actions/sliceEntities.ts         | 178 +++++++
 .../DashboardBuilder/DashboardBuilder.test.tsx     |   3 +-
 .../DashboardBuilder/DashboardBuilder.tsx          |  31 +-
 .../dashboard/components/DashboardBuilder/state.ts |   3 +-
 .../components/FiltersBadge/FiltersBadge.test.tsx  |   8 +-
 .../dashboard/components/FiltersBadge/index.tsx    |  25 +-
 .../Header/HeaderActionsDropdown/index.jsx         |   4 +-
 .../src/dashboard/components/Header/index.jsx      |   3 +-
 .../dashboard/components/PropertiesModal/index.tsx |  10 +-
 .../src/dashboard/components/SliceAdder.jsx        | 151 ++++--
 .../src/dashboard/components/SliceAdder.test.jsx   |  56 +-
 .../SliceHeaderControls.test.tsx                   |   2 +-
 .../components/SliceHeaderControls/index.tsx       |  11 +-
 .../FilterBar/CrossFilters/Vertical.tsx            |   3 +
 .../FilterBar/CrossFilters/selectors.ts            |  15 +-
 .../nativeFilters/FilterBar/FilterBar.test.tsx     |   3 +-
 .../FilterBar/FilterControls/FilterControls.tsx    |   4 +
 .../FilterBar/FilterControls/FilterValue.tsx       |  15 +-
 .../nativeFilters/FilterBar/Horizontal.tsx         |   5 +-
 .../nativeFilters/FilterBar/Vertical.tsx           |  10 +-
 .../components/nativeFilters/FilterBar/index.tsx   |  65 ++-
 .../components/nativeFilters/FilterBar/types.ts    |   1 +
 .../components/nativeFilters/FilterBar/utils.ts    |  18 +
 .../FiltersConfigModal/FilterConfigurePane.tsx     |   3 +-
 .../FiltersConfigForm/ColumnSelect.tsx             |   2 +-
 .../FiltersConfigForm/DatasetSelect.tsx            |   3 +-
 .../FiltersConfigForm/DefaultValue.tsx             |  13 +-
 .../FiltersConfigForm/DependencyList.tsx           |   6 +-
 .../FilterScope/FilterScope.test.tsx               |   2 +-
 .../FiltersConfigForm/FilterScope/FilterScope.tsx  |  19 +-
 .../FiltersConfigForm/FiltersConfigForm.tsx        |  15 +-
 .../FiltersConfigForm/constants.ts}                |  39 +-
 .../FiltersConfigModal/FiltersConfigForm/utils.ts  |  30 +-
 .../FiltersConfigModal/FiltersConfigModal.tsx      |  11 +-
 .../components/nativeFilters/selectors.ts          |   1 +
 .../src/dashboard/containers/DashboardPage.tsx     |  16 +-
 .../src/dashboard/containers/SliceAdder.jsx        |  14 +-
 .../src/dashboard/reducers/nativeFilters.ts        |  13 +
 .../src/dashboard/reducers/sliceEntities.js        |  12 +-
 .../src/dashboard/reducers/sliceEntities.test.js   |   4 +-
 superset-frontend/src/dashboard/styles.ts          |   7 +
 superset-frontend/src/dashboard/types.ts           |  21 +
 .../src/dashboard/util/crossFilters.ts             |   5 +-
 .../dashboard/util/updateComponentParentsList.js   |  15 +-
 superset-frontend/src/dataMask/actions.ts          |   9 +-
 .../src/explore/actions/exploreActions.ts          |  21 +-
 .../src/explore/actions/hydrateExplore.ts          |  20 +
 .../explore/components/ControlPanelsContainer.tsx  |   2 +-
 .../components/DataTablesPane/DataTablesPane.tsx   |   4 +-
 .../DataTablesPane/test/DataTablesPane.test.tsx    |   2 +-
 .../explore/components/DatasourcePanel/index.tsx   |   7 +-
 .../src/explore/components/ExploreChartPanel.jsx   |   7 +-
 .../ExploreViewContainer.test.tsx                  |   4 +-
 .../explore/components/PropertiesModal/index.tsx   |   9 +-
 .../src/explore/components/SaveModal.tsx           |   9 +-
 .../AnnotationLayerControl/AnnotationLayer.jsx     |  66 ++-
 .../AnnotationLayer.test.tsx                       |   8 +-
 .../ConditionalFormattingControl.tsx               |  37 +-
 .../controls/ConditionalFormattingControl/types.ts |   1 +
 .../index.tsx                                      |  11 +-
 .../useExploreAdditionalActionsMenu/index.jsx      |   4 +-
 .../getFormDataWithDashboardContext.ts             |  74 +--
 superset-frontend/src/featureFlags.ts              |   5 +-
 .../alerts}/AlertReportModal.test.jsx              |   2 +-
 .../alerts}/AlertReportModal.test.tsx              |   2 +-
 .../alert => features/alerts}/AlertReportModal.tsx |  78 +--
 .../components/AlertReportCronScheduler.test.tsx   |   0
 .../components/AlertReportCronScheduler.tsx        |   2 +-
 .../alerts}/components/AlertStatusIcon.tsx         |   0
 .../alerts}/components/NotificationMethod.tsx      |   2 +-
 .../alerts}/components/RecipientIcon.tsx           |   0
 .../{views/CRUD/alert => features/alerts}/types.ts |   5 +
 .../allEntities}/AllEntitiesTable.tsx              |   4 +-
 .../AnnotationLayerModal.test.jsx                  |   2 +-
 .../annotationLayers}/AnnotationLayerModal.tsx     |   0
 .../annotationLayers}/types.ts                     |   0
 .../annotations}/AnnotationModal.test.jsx          |   2 +-
 .../annotations}/AnnotationModal.tsx               |   0
 .../annotation => features/annotations}/types.ts   |   0
 .../CRUD/chart => features/charts}/ChartCard.tsx   |   4 +-
 .../cssTemplates}/CssTemplateModal.test.jsx        |   2 +-
 .../cssTemplates}/CssTemplateModal.tsx             |   0
 .../cssTemplates}/types.ts                         |   0
 .../dashboards}/DashboardCard.tsx                  |   4 +-
 .../dashboard => features/dashboards}/types.ts     |   0
 .../DatabaseConnectionForm/CommonParameters.tsx    |   0
 .../DatabaseConnectionForm/EncryptedField.tsx      |   0
 .../DatabaseConnectionForm/TableCatalog.tsx        |   0
 .../DatabaseConnectionForm/ValidatedInputField.tsx |   0
 .../DatabaseModal/DatabaseConnectionForm/index.tsx |   0
 .../databases}/DatabaseModal/ExtraOptions.tsx      |   2 +-
 .../databases}/DatabaseModal/ModalHeader.tsx       |   0
 .../databases}/DatabaseModal/SSHTunnelForm.tsx     |   1 -
 .../databases}/DatabaseModal/SSHTunnelSwitch.tsx   |   0
 .../databases}/DatabaseModal/SqlAlchemyForm.tsx    |   1 -
 .../databases}/DatabaseModal/index.test.tsx        |   5 +-
 .../databases}/DatabaseModal/index.tsx             |   8 +-
 .../databases}/DatabaseModal/styles.ts             |   0
 .../data/database => features/databases}/state.ts  |   0
 .../data/database => features/databases}/types.ts  |   0
 .../DatasetPanel/DatasetPanel.stories.tsx          |   0
 .../AddDataset/DatasetPanel/DatasetPanel.test.tsx  |   2 +-
 .../AddDataset/DatasetPanel/DatasetPanel.tsx       |   2 +-
 .../AddDataset/DatasetPanel/MessageContent.tsx     |   0
 .../datasets}/AddDataset/DatasetPanel/fixtures.ts  |   2 +-
 .../datasets}/AddDataset/DatasetPanel/index.tsx    |   2 +-
 .../datasets}/AddDataset/DatasetPanel/types.ts     |   0
 .../AddDataset/EditDataset/EditDataset.test.tsx    |   0
 .../EditDataset/UsageTab/UsageTab.test.tsx         |   0
 .../AddDataset/EditDataset/UsageTab/index.tsx      |   0
 .../datasets}/AddDataset/EditDataset/index.tsx     |   2 +-
 .../datasets}/AddDataset/Footer/Footer.test.tsx    |   2 +-
 .../datasets}/AddDataset/Footer/index.tsx          |   0
 .../datasets}/AddDataset/Header/Header.test.tsx    |   4 +-
 .../datasets}/AddDataset/Header/index.tsx          |  10 +-
 .../AddDataset/LeftPanel/LeftPanel.test.tsx        |   4 +-
 .../datasets}/AddDataset/LeftPanel/index.tsx       |   2 +-
 .../AddDataset/RightPanel/RightPanel.test.tsx      |   2 +-
 .../datasets}/AddDataset/RightPanel/index.tsx      |   0
 .../datasets}/AddDataset/types.tsx                 |   0
 .../datasets}/DatasetLayout/DatasetLayout.test.tsx |  12 +-
 .../datasets}/DatasetLayout/index.tsx              |   2 +-
 .../datasets}/DuplicateDatasetModal.tsx            |   0
 .../dataset => features/datasets}/constants.ts     |   0
 .../datasets/hooks/useDatasetLists.ts}             |  93 +---
 .../datasets/hooks/useGetDatasetRelatedCounts.ts   |  55 ++
 .../metadataBar/DatasetMetadataBar.stories.tsx     |   2 +-
 .../metadataBar/useDatasetMetadataBar.test.tsx     |  70 ++-
 .../datasets/metadataBar/useDatasetMetadataBar.tsx |  41 +-
 .../data/dataset => features/datasets}/styles.ts   |   0
 .../data/dataset => features/datasets}/types.ts    |   0
 .../home}/ActivityTable.test.tsx                   |   2 +-
 .../welcome => features/home}/ActivityTable.tsx    |   4 +-
 .../welcome => features/home}/ChartTable.test.tsx  |   3 +-
 .../CRUD/welcome => features/home}/ChartTable.tsx  |   4 +-
 .../home}/DashboardTable.test.tsx                  |   4 +-
 .../welcome => features/home}/DashboardTable.tsx   |   4 +-
 .../welcome => features/home}/EmptyState.test.tsx  |   2 +-
 .../CRUD/welcome => features/home}/EmptyState.tsx  |   0
 .../home}/LanguagePicker.test.tsx                  |   0
 .../home}/LanguagePicker.tsx                       |   0
 .../components => features/home}/Menu.test.tsx     |   0
 .../{views/components => features/home}/Menu.tsx   |   0
 .../home}/RightMenu.test.tsx                       |   2 +-
 .../components => features/home}/RightMenu.tsx     |  11 +-
 .../home}/SavedQueries.test.tsx                    |   5 +-
 .../welcome => features/home}/SavedQueries.tsx     |   6 +-
 .../components => features/home}/SubMenu.test.tsx  |   0
 .../components => features/home}/SubMenu.tsx       |   7 +-
 .../common.ts => features/home/commonMenuData.ts}  |   0
 .../{views/components => features/home}/types.ts   |  10 +
 .../queries}/QueryPreviewModal.test.tsx            |   2 +-
 .../queries}/QueryPreviewModal.tsx                 |   4 +-
 .../queries}/SavedQueryPreviewModal.test.jsx       |   2 +-
 .../queries}/SavedQueryPreviewModal.tsx            |   4 +-
 .../queries/SyntaxHighlighterCopy.tsx}             |   0
 .../features/queries/hooks/useQueryPreviewState.ts |  76 +++
 .../src/{views/CRUD => features}/tags/TagCard.tsx  |   6 +-
 superset-frontend/src/{ => features/tags}/tags.ts  |   0
 .../components/Select/SelectFilterPlugin.tsx       |  19 +-
 superset-frontend/src/middleware/asyncEvent.ts     |   3 +-
 .../pages/AlertReportList/AlertReportList.test.jsx |   2 +-
 .../src/pages/AlertReportList/index.tsx            |  11 +-
 superset-frontend/src/pages/AllEntities/index.tsx  |   2 +-
 .../AnnotationLayerList.test.jsx                   |   4 +-
 .../src/pages/AnnotationLayerList/index.tsx        |   6 +-
 .../pages/AnnotationList/AnnotationList.test.jsx   |   2 +-
 .../src/pages/AnnotationList/index.tsx             |   6 +-
 .../src/pages/ChartCreation/index.tsx              |   9 +-
 superset-frontend/src/pages/ChartList/index.tsx    |   7 +-
 .../pages/CssTemplateList/CssTemplateList.test.jsx |   2 +-
 .../src/pages/CssTemplateList/index.tsx            |   6 +-
 .../src/pages/DashboardList/index.tsx              |  12 +-
 .../src/pages/DatabaseList/DatabaseList.test.jsx   |   4 +-
 superset-frontend/src/pages/DatabaseList/index.tsx |  12 +-
 .../src/pages/DatasetCreation/index.tsx            |  16 +-
 .../src/pages/DatasetList/DatasetList.test.tsx     |   8 +-
 superset-frontend/src/pages/DatasetList/index.tsx  |  15 +-
 .../src/pages/ExecutionLogList/index.tsx           |   6 +-
 superset-frontend/src/pages/Home/Home.test.tsx     |   2 +-
 superset-frontend/src/pages/Home/index.tsx         | 206 ++++----
 .../QueryHistoryList/QueryHistoryList.test.tsx     |   4 +-
 .../src/pages/QueryHistoryList/index.tsx           |   6 +-
 .../pages/SavedQueryList/SavedQueryList.test.jsx   |   2 +-
 .../src/pages/SavedQueryList/index.tsx             |  13 +-
 superset-frontend/src/pages/Tags/index.tsx         |  10 +-
 .../src/profile/components/Favorites.tsx           |  31 +-
 superset-frontend/src/profile/types.ts             |   9 +
 superset-frontend/src/types/bootstrapTypes.ts      |   2 +-
 .../types.ts => utils/cachedSupersetGet.ts}        |  16 +-
 superset-frontend/src/utils/hostNamesConfig.js     |   7 +-
 superset-frontend/src/utils/localStorageHelpers.ts |   2 +
 superset-frontend/src/utils/simpleFilterToAdhoc.ts |  69 +++
 superset-frontend/src/views/App.tsx                |   2 +-
 superset-frontend/src/views/CRUD/hooks.ts          |  23 +-
 superset-frontend/src/views/CRUD/utils.test.tsx    |   2 +-
 superset-frontend/src/views/CRUD/utils.tsx         |   2 +-
 superset-frontend/src/views/menu.tsx               |  16 +-
 superset-frontend/src/views/types.ts               |   2 +-
 superset-websocket/package-lock.json               | 380 ++++++++++++--
 superset-websocket/package.json                    |   6 +-
 superset/charts/api.py                             | 103 +++-
 superset/charts/commands/export.py                 |   2 +-
 superset/charts/dao.py                             |  30 ++
 superset/charts/filters.py                         |  43 +-
 superset/charts/post_processing.py                 |  11 +-
 superset/common/query_context.py                   |   5 +-
 superset/common/query_context_processor.py         |  12 +-
 superset/config.py                                 |   4 +
 superset/connectors/sqla/models.py                 |  44 +-
 superset/constants.py                              |   3 +
 superset/dashboards/api.py                         |  90 ++++
 .../dashboards/commands/importers/v1/__init__.py   |   9 +-
 superset/dashboards/dao.py                         |  29 ++
 superset/db_engine_specs/bigquery.py               |  99 ++--
 superset/extensions/ssh.py                         |   4 +-
 ...03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py |  34 +-
 ...af1b_drop_postgres_enum_constrains_for_tags.py} |  27 +-
 superset/models/dashboard.py                       |  15 +-
 superset/models/helpers.py                         |  11 +
 superset/models/slice.py                           |  21 +-
 superset/models/sql_lab.py                         |  17 +-
 superset/translations/zh/LC_MESSAGES/messages.po   |  18 +-
 superset/utils/csv.py                              |   3 +
 superset/utils/pandas_postprocessing/pivot.py      |   2 +-
 superset/views/base.py                             |   3 +
 superset/views/core.py                             |  49 +-
 superset/viz.py                                    |  16 +-
 tests/integration_tests/charts/api_tests.py        |  98 +++-
 tests/integration_tests/charts/commands_tests.py   |  50 +-
 tests/integration_tests/charts/data/api_tests.py   |   8 +
 tests/integration_tests/csv_upload_tests.py        |   5 +-
 tests/integration_tests/dashboards/api_tests.py    |  70 +++
 .../integration_tests/dashboards/commands_tests.py |   3 +
 .../db_engine_specs/bigquery_tests.py              |  47 +-
 tests/integration_tests/tags/dao_tests.py          |   5 +-
 .../integration_tests/tasks/async_queries_tests.py |   1 +
 tests/unit_tests/charts/dao/dao_tests.py           |  35 +-
 tests/unit_tests/charts/test_post_processing.py    |  11 +-
 tests/unit_tests/dashboards/dao_tests.py           |  79 +++
 355 files changed, 5066 insertions(+), 1697 deletions(-)
 create mode 100644 superset-frontend/src/components/Chart/DrillBy/DrillByChart.test.tsx
 create mode 100644 superset-frontend/src/components/Chart/DrillBy/DrillByChart.tsx
 create mode 100644 superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx
 create mode 100644 superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.tsx
 create mode 100644 superset-frontend/src/components/Chart/DrillBy/DrillByModal.test.tsx
 create mode 100644 superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx
 create mode 100644 superset-frontend/src/components/Chart/MenuItemWithTruncation.tsx
 copy superset-frontend/src/components/Chart/{DrillDetail => }/types.ts (86%)
 delete mode 100644 superset-frontend/src/dashboard/actions/sliceEntities.js
 delete mode 100644 superset-frontend/src/dashboard/actions/sliceEntities.test.js
 create mode 100644 superset-frontend/src/dashboard/actions/sliceEntities.ts
 copy superset-frontend/src/{components/Chart/DrillDetail/types.ts => dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/constants.ts} (64%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/AlertReportModal.test.jsx (99%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/AlertReportModal.test.tsx (97%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/AlertReportModal.tsx (96%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/components/AlertReportCronScheduler.test.tsx (100%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/components/AlertReportCronScheduler.tsx (97%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/components/AlertStatusIcon.tsx (100%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/components/NotificationMethod.tsx (98%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/components/RecipientIcon.tsx (100%)
 rename superset-frontend/src/{views/CRUD/alert => features/alerts}/types.ts (94%)
 rename superset-frontend/src/{views/CRUD/allentities => features/allEntities}/AllEntitiesTable.tsx (97%)
 rename superset-frontend/src/{views/CRUD/annotationlayers => features/annotationLayers}/AnnotationLayerModal.test.jsx (97%)
 rename superset-frontend/src/{views/CRUD/annotationlayers => features/annotationLayers}/AnnotationLayerModal.tsx (100%)
 rename superset-frontend/src/{views/CRUD/annotationlayers => features/annotationLayers}/types.ts (100%)
 rename superset-frontend/src/{views/CRUD/annotation => features/annotations}/AnnotationModal.test.jsx (97%)
 rename superset-frontend/src/{views/CRUD/annotation => features/annotations}/AnnotationModal.tsx (100%)
 rename superset-frontend/src/{views/CRUD/annotation => features/annotations}/types.ts (100%)
 rename superset-frontend/src/{views/CRUD/chart => features/charts}/ChartCard.tsx (97%)
 rename superset-frontend/src/{views/CRUD/csstemplates => features/cssTemplates}/CssTemplateModal.test.jsx (97%)
 rename superset-frontend/src/{views/CRUD/csstemplates => features/cssTemplates}/CssTemplateModal.tsx (100%)
 rename superset-frontend/src/{views/CRUD/csstemplates => features/cssTemplates}/types.ts (100%)
 rename superset-frontend/src/{views/CRUD/dashboard => features/dashboards}/DashboardCard.tsx (97%)
 rename superset-frontend/src/{views/CRUD/dashboard => features/dashboards}/types.ts (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/DatabaseConnectionForm/CommonParameters.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/DatabaseConnectionForm/EncryptedField.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/DatabaseConnectionForm/TableCatalog.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/DatabaseConnectionForm/ValidatedInputField.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/DatabaseConnectionForm/index.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/ExtraOptions.tsx (99%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/ModalHeader.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/SSHTunnelForm.tsx (99%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/SSHTunnelSwitch.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/SqlAlchemyForm.tsx (99%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/index.test.tsx (99%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/index.tsx (99%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/DatabaseModal/styles.ts (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/state.ts (100%)
 rename superset-frontend/src/{views/CRUD/data/database => features/databases}/types.ts (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/DatasetPanel/DatasetPanel.stories.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/DatasetPanel/DatasetPanel.test.tsx (98%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/DatasetPanel/DatasetPanel.tsx (99%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/DatasetPanel/MessageContent.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/DatasetPanel/fixtures.ts (94%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/DatasetPanel/index.tsx (98%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/DatasetPanel/types.ts (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/EditDataset/EditDataset.test.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/EditDataset/UsageTab/index.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/EditDataset/index.tsx (95%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/Footer/Footer.test.tsx (97%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/Footer/index.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/Header/Header.test.tsx (95%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/Header/index.tsx (96%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/LeftPanel/LeftPanel.test.tsx (98%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/LeftPanel/index.tsx (99%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/RightPanel/RightPanel.test.tsx (93%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/RightPanel/index.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/AddDataset/types.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/DatasetLayout/DatasetLayout.test.tsx (85%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/DatasetLayout/index.tsx (98%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/DuplicateDatasetModal.tsx (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/constants.ts (100%)
 rename superset-frontend/src/{views/CRUD/data/hooks.ts => features/datasets/hooks/useDatasetLists.ts} (54%)
 create mode 100644 superset-frontend/src/features/datasets/hooks/useGetDatasetRelatedCounts.ts
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/styles.ts (100%)
 rename superset-frontend/src/{views/CRUD/data/dataset => features/datasets}/types.ts (100%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/ActivityTable.test.tsx (98%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/ActivityTable.tsx (99%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/ChartTable.test.tsx (98%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/ChartTable.tsx (98%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/DashboardTable.test.tsx (95%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/DashboardTable.tsx (98%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/EmptyState.test.tsx (97%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/EmptyState.tsx (100%)
 rename superset-frontend/src/{views/components => features/home}/LanguagePicker.test.tsx (100%)
 rename superset-frontend/src/{views/components => features/home}/LanguagePicker.tsx (100%)
 rename superset-frontend/src/{views/components => features/home}/Menu.test.tsx (100%)
 rename superset-frontend/src/{views/components => features/home}/Menu.tsx (100%)
 rename superset-frontend/src/{views/components => features/home}/RightMenu.test.tsx (99%)
 rename superset-frontend/src/{views/components => features/home}/RightMenu.tsx (98%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/SavedQueries.test.tsx (96%)
 rename superset-frontend/src/{views/CRUD/welcome => features/home}/SavedQueries.tsx (99%)
 rename superset-frontend/src/{views/components => features/home}/SubMenu.test.tsx (100%)
 rename superset-frontend/src/{views/components => features/home}/SubMenu.tsx (98%)
 rename superset-frontend/src/{views/CRUD/data/common.ts => features/home/commonMenuData.ts} (100%)
 rename superset-frontend/src/{views/components => features/home}/types.ts (85%)
 rename superset-frontend/src/{views/CRUD/data/query => features/queries}/QueryPreviewModal.test.tsx (98%)
 rename superset-frontend/src/{views/CRUD/data/query => features/queries}/QueryPreviewModal.tsx (97%)
 rename superset-frontend/src/{views/CRUD/data/savedquery => features/queries}/SavedQueryPreviewModal.test.jsx (97%)
 rename superset-frontend/src/{views/CRUD/data/savedquery => features/queries}/SavedQueryPreviewModal.tsx (96%)
 rename superset-frontend/src/{views/CRUD/data/components/SyntaxHighlighterCopy/index.tsx => features/queries/SyntaxHighlighterCopy.tsx} (100%)
 create mode 100644 superset-frontend/src/features/queries/hooks/useQueryPreviewState.ts
 rename superset-frontend/src/{views/CRUD => features}/tags/TagCard.tsx (95%)
 rename superset-frontend/src/{ => features/tags}/tags.ts (100%)
 rename superset-frontend/src/{views/CRUD/welcome/types.ts => utils/cachedSupersetGet.ts} (74%)
 create mode 100644 superset-frontend/src/utils/simpleFilterToAdhoc.ts
 copy superset/migrations/versions/{2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py => 2023-03-29_20-30_07f9a902af1b_drop_postgres_enum_constrains_for_tags.py} (57%)
 create mode 100644 tests/unit_tests/dashboards/dao_tests.py


[superset] 01/03: lit

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hugh pushed a commit to branch chart-ds-constraint
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 4d673a6cf034f47ba6c7588c1a7b8c75f4491e30
Author: hughhhh <hu...@gmail.com>
AuthorDate: Thu Apr 6 11:06:57 2023 -0400

    lit
---
 ...03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py | 36 +++++++++++++++++++---
 1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py b/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
index 8b22ebbf50..3bcb0c3822 100644
--- a/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
+++ b/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
@@ -23,14 +23,40 @@ Create Date: 2023-03-27 12:30:01.164594
 """
 
 # revision identifiers, used by Alembic.
-revision = '7e67aecbf3f1'
-down_revision = 'b5ea9d343307'
+revision = "7e67aecbf3f1"
+down_revision = "b5ea9d343307"
+
+import json
 
-from alembic import op
 import sqlalchemy as sa
+from alembic import op
+from sqlalchemy.ext.declarative import declarative_base
+
+from superset import db
+
+Base = declarative_base()
+
+
+class Slice(Base):  # type: ignore
+    __tablename__ = "slices"
+
+    id = sa.Column(sa.Integer, primary_key=True)
+    slice_name = sa.Column(sa.String(250))
+    datasource_type = sa.Column(sa.String(200))
+    query_context = sa.Column(sa.Text)
+
 
 def upgrade():
-    pass
+    bind = op.get_bind()
+    session = db.Session(bind=bind)
+    for slc in session.query(Slice).filter(Slice.datasource_type != "table").all():
+        # clean up all charts with datasource_type not != table
+        slc.datasource_type = "table"
+
+    op.create_check_constraint(
+        "ck_chart_datasource", "slice", sa.column("datasource_type") == "table"
+    )
+
 
 def downgrade():
-    pass 
+    op.drop_constraint("ck_chart_datasource", "slices", type_="check")


[superset] 03/03: update table name

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hugh pushed a commit to branch chart-ds-constraint
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 5afaf6e4323d0858c4c6edabebcd8efd9ad70b43
Author: hughhhh <hu...@gmail.com>
AuthorDate: Thu Apr 6 11:28:02 2023 -0400

    update table name
---
 .../versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py b/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
index 3bcb0c3822..e611a197cc 100644
--- a/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
+++ b/superset/migrations/versions/2023-03-27_12-30_7e67aecbf3f1_chart_ds_constraint.py
@@ -24,9 +24,7 @@ Create Date: 2023-03-27 12:30:01.164594
 
 # revision identifiers, used by Alembic.
 revision = "7e67aecbf3f1"
-down_revision = "b5ea9d343307"
-
-import json
+down_revision = "07f9a902af1b"
 
 import sqlalchemy as sa
 from alembic import op
@@ -48,13 +46,13 @@ class Slice(Base):  # type: ignore
 
 def upgrade():
     bind = op.get_bind()
-    session = db.Session(bind=bind)
+    session = db.session(bind=bind)
     for slc in session.query(Slice).filter(Slice.datasource_type != "table").all():
         # clean up all charts with datasource_type not != table
         slc.datasource_type = "table"
 
     op.create_check_constraint(
-        "ck_chart_datasource", "slice", sa.column("datasource_type") == "table"
+        "ck_chart_datasource", "slices", sa.column("datasource_type") == "table"
     )
 
 


[superset] 02/03: Merge branch 'master' of https://github.com/apache/superset into chart-ds-constraint

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hugh pushed a commit to branch chart-ds-constraint
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 237e2ecb1e7e3ef9261af0b3c63312fb61f1f256
Merge: 4d673a6cf0 bccd2670cc
Author: hughhhh <hu...@gmail.com>
AuthorDate: Thu Apr 6 11:07:15 2023 -0400

    Merge branch 'master' of https://github.com/apache/superset into chart-ds-constraint

 docker-compose-non-dev.yml                         |   2 +-
 docker-compose.yml                                 |   2 +-
 docs/docs/installation/alerts-reports.mdx          |   4 +-
 docs/docs/installation/cache.mdx                   |   3 +
 docs/docs/security.mdx                             |  29 +-
 docs/static/resources/openapi.json                 |  30 ++
 helm/superset/Chart.yaml                           |   4 +-
 helm/superset/README.md                            |   2 +-
 helm/superset/values.yaml                          |   4 -
 requirements/integration.txt                       |   2 +-
 .../cypress/integration/chart_list/list.test.ts    |   8 +-
 .../cypress/integration/dashboard/editmode.test.ts |   2 +-
 .../integration/dashboard/nativeFilters.test.ts    |  11 +-
 .../cypress/integration/dashboard/utils.ts         |   9 +-
 superset-frontend/jest.config.js                   |   3 +
 superset-frontend/package-lock.json                | 562 +++++++++++++++++++++
 .../generators/plugin-chart/templates/README.erb   |  25 +
 .../generators/plugin-chart/templates/package.erb  |   2 +-
 .../plugin-chart/templates/src/MyChart.erb         |  11 +-
 .../templates/src/plugin/controlPanel.erb          |   6 +-
 .../plugin-chart/templates/src/types.erb           |   6 +-
 .../templates/test/plugin/transformProps.test.erb  |   3 +-
 .../src/shared-controls/mixins.tsx                 |   4 +-
 .../packages/superset-ui-core/package.json         |   1 +
 .../superset-ui-core/src/chart/types/Base.ts       |   6 +
 .../src/components/SafeMarkdown.tsx                |   7 +-
 .../src/query/extractQueryFields.ts                |   3 +-
 .../superset-ui-core/src/query/types/Filter.ts     |  12 +-
 .../legacy-plugin-chart-heatmap/src/Heatmap.js     |  15 +-
 .../legacy-plugin-chart-world-map/src/WorldMap.js  |   9 +
 .../legacy-plugin-chart-world-map/src/index.js     |   6 +-
 .../plugins/legacy-preset-chart-nvd3/src/utils.js  |   2 +-
 .../plugin-chart-echarts/src/BoxPlot/index.ts      |   8 +-
 .../plugin-chart-echarts/src/Funnel/index.ts       |   6 +-
 .../src/Funnel/transformProps.ts                   |   2 +-
 .../plugin-chart-echarts/src/Gauge/index.ts        |   6 +-
 .../src/Graph/EchartsGraph.tsx                     |  11 +-
 .../plugin-chart-echarts/src/Graph/index.ts        |   6 +-
 .../src/Graph/transformProps.ts                    |   3 +-
 .../src/MixedTimeseries/EchartsMixedTimeseries.tsx |  68 +--
 .../src/MixedTimeseries/index.ts                   |   6 +-
 .../src/MixedTimeseries/transformProps.ts          |   8 +-
 .../plugins/plugin-chart-echarts/src/Pie/index.ts  |   6 +-
 .../plugin-chart-echarts/src/Pie/transformProps.ts |   2 +-
 .../plugin-chart-echarts/src/Radar/index.ts        |   6 +-
 .../src/Radar/transformProps.ts                    |   2 +-
 .../src/Sunburst/EchartsSunburst.tsx               |  10 +-
 .../plugin-chart-echarts/src/Sunburst/index.ts     |   8 +-
 .../src/Timeseries/Area/index.ts                   |   6 +-
 .../src/Timeseries/EchartsTimeseries.tsx           |  60 ++-
 .../src/Timeseries/Regular/Bar/index.ts            |   6 +-
 .../src/Timeseries/Regular/Line/index.ts           |   6 +-
 .../src/Timeseries/Regular/Scatter/index.ts        |   6 +-
 .../src/Timeseries/Regular/SmoothLine/index.ts     |   6 +-
 .../src/Timeseries/Step/index.ts                   |   6 +-
 .../plugin-chart-echarts/src/Timeseries/index.ts   |   6 +-
 .../src/Timeseries/transformProps.ts               |   8 +-
 .../src/Treemap/EchartsTreemap.tsx                 |  16 +-
 .../plugin-chart-echarts/src/Treemap/index.ts      |   6 +-
 .../src/utils/eventHandlers.ts                     |   7 +-
 .../plugin-chart-echarts/src/utils/series.ts       |   9 +
 .../plugin-chart-echarts/test/utils/series.test.ts |  58 ++-
 .../src/PivotTableChart.tsx                        |  19 +-
 .../src/plugin/controlPanel.tsx                    |   4 +-
 .../plugin-chart-pivot-table/src/plugin/index.ts   |  10 +-
 .../plugins/plugin-chart-table/src/TableChart.tsx  |  12 +
 .../plugin-chart-table/src/controlPanel.tsx        |  32 +-
 .../plugins/plugin-chart-table/src/index.ts        |   8 +-
 .../plugin-chart-table/src/transformProps.ts       |   3 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |   1 +
 .../plugins/plugin-chart-table/test/testData.ts    |  14 +
 .../src/legacyPlugin/transformProps.ts             |   7 +-
 .../src/legacyPlugin/types.ts                      |   4 +-
 .../plugins/plugin-chart-word-cloud/src/types.ts   |   4 +-
 .../spec/fixtures/mockChartQueries.js              |   1 +
 superset-frontend/src/SqlLab/App.jsx               |   8 +-
 superset-frontend/src/SqlLab/actions/sqlLab.js     |   6 +-
 .../SqlLab/components/ShareSqlLabQuery/index.tsx   |   4 +-
 .../src/SqlLab/components/SouthPane/index.tsx      |   4 +-
 .../src/SqlLab/components/SqlEditor/index.jsx      |   4 +-
 .../SqlLab/components/TabbedSqlEditors/index.jsx   |   4 +-
 .../src/SqlLab/reducers/getInitialState.js         |  20 +-
 .../src/SqlLab/reducers/getInitialState.test.ts    |  54 ++
 superset-frontend/src/components/Chart/Chart.jsx   |  11 +-
 .../src/components/Chart/ChartContextMenu.tsx      |  30 +-
 .../components/Chart/DrillBy/DrillByChart.test.tsx |  70 +++
 .../src/components/Chart/DrillBy/DrillByChart.tsx  |  62 +++
 .../Chart/DrillBy/DrillByMenuItems.test.tsx        | 186 +++++++
 .../components/Chart/DrillBy/DrillByMenuItems.tsx  | 258 ++++++++++
 .../components/Chart/DrillBy/DrillByModal.test.tsx | 146 ++++++
 .../src/components/Chart/DrillBy/DrillByModal.tsx  | 182 +++++++
 .../Chart/DrillDetail/DrillDetailMenuItems.tsx     |  34 +-
 .../Chart/DrillDetail/DrillDetailPane.test.tsx     |  16 +-
 .../Chart/DrillDetail/DrillDetailPane.tsx          |   5 +-
 .../src/components/Chart/DrillDetail/types.ts      |  19 -
 .../components/Chart/MenuItemWithTruncation.tsx    |  59 +++
 .../src/components/Chart/chartAction.js            |   4 +-
 .../src/components/Chart/chartReducer.ts           |   4 +-
 .../components/Chart/{DrillDetail => }/types.ts    |   8 -
 .../src/components/Chart/utils.test.ts             |   3 +
 superset-frontend/src/components/Chart/utils.ts    |  38 +-
 .../Datasource/ChangeDatasourceModal.tsx           |   2 +-
 .../src/components/Datasource/DatasourceEditor.jsx |  12 +-
 .../src/components/Datasource/DatasourceModal.tsx  |   8 +-
 .../src/components/DynamicPlugins/index.tsx        |   3 +-
 .../src/components/FaveStar/FaveStar.test.tsx      |   4 +-
 .../src/components/FaveStar/index.tsx              |  12 +-
 .../ReportModal/HeaderReportDropdown/index.tsx     |   2 +-
 superset-frontend/src/components/Select/Select.tsx |  23 +-
 superset-frontend/src/components/Select/types.ts   |   5 +
 .../src/dashboard/actions/dashboardState.js        |  25 +-
 superset-frontend/src/dashboard/actions/hydrate.js |   4 +-
 .../src/dashboard/actions/nativeFilters.ts         |  23 +-
 .../src/dashboard/actions/sliceEntities.js         | 173 -------
 .../src/dashboard/actions/sliceEntities.test.js    | 102 ----
 .../src/dashboard/actions/sliceEntities.ts         | 178 +++++++
 .../DashboardBuilder/DashboardBuilder.test.tsx     |   3 +-
 .../DashboardBuilder/DashboardBuilder.tsx          |  31 +-
 .../dashboard/components/DashboardBuilder/state.ts |   3 +-
 .../components/FiltersBadge/FiltersBadge.test.tsx  |   8 +-
 .../dashboard/components/FiltersBadge/index.tsx    |  25 +-
 .../Header/HeaderActionsDropdown/index.jsx         |   4 +-
 .../src/dashboard/components/Header/index.jsx      |   3 +-
 .../dashboard/components/PropertiesModal/index.tsx |  10 +-
 .../src/dashboard/components/SliceAdder.jsx        | 151 ++++--
 .../src/dashboard/components/SliceAdder.test.jsx   |  56 +-
 .../SliceHeaderControls.test.tsx                   |   2 +-
 .../components/SliceHeaderControls/index.tsx       |  11 +-
 .../FilterBar/CrossFilters/Vertical.tsx            |   3 +
 .../FilterBar/CrossFilters/selectors.ts            |  15 +-
 .../nativeFilters/FilterBar/FilterBar.test.tsx     |   3 +-
 .../FilterBar/FilterControls/FilterControls.tsx    |   4 +
 .../FilterBar/FilterControls/FilterValue.tsx       |  15 +-
 .../nativeFilters/FilterBar/Horizontal.tsx         |   5 +-
 .../nativeFilters/FilterBar/Vertical.tsx           |  10 +-
 .../components/nativeFilters/FilterBar/index.tsx   |  65 ++-
 .../components/nativeFilters/FilterBar/types.ts    |   1 +
 .../components/nativeFilters/FilterBar/utils.ts    |  18 +
 .../FiltersConfigModal/FilterConfigurePane.tsx     |   3 +-
 .../FiltersConfigForm/ColumnSelect.tsx             |   2 +-
 .../FiltersConfigForm/DatasetSelect.tsx            |   3 +-
 .../FiltersConfigForm/DefaultValue.tsx             |  13 +-
 .../FiltersConfigForm/DependencyList.tsx           |   6 +-
 .../FilterScope/FilterScope.test.tsx               |   2 +-
 .../FiltersConfigForm/FilterScope/FilterScope.tsx  |  19 +-
 .../FiltersConfigForm/FiltersConfigForm.tsx        |  15 +-
 .../FiltersConfigForm/constants.ts}                |  39 +-
 .../FiltersConfigModal/FiltersConfigForm/utils.ts  |  30 +-
 .../FiltersConfigModal/FiltersConfigModal.tsx      |  11 +-
 .../components/nativeFilters/selectors.ts          |   1 +
 .../src/dashboard/containers/DashboardPage.tsx     |  16 +-
 .../src/dashboard/containers/SliceAdder.jsx        |  14 +-
 .../src/dashboard/reducers/nativeFilters.ts        |  13 +
 .../src/dashboard/reducers/sliceEntities.js        |  12 +-
 .../src/dashboard/reducers/sliceEntities.test.js   |   4 +-
 superset-frontend/src/dashboard/styles.ts          |   7 +
 superset-frontend/src/dashboard/types.ts           |  21 +
 .../src/dashboard/util/crossFilters.ts             |   5 +-
 .../dashboard/util/updateComponentParentsList.js   |  15 +-
 superset-frontend/src/dataMask/actions.ts          |   9 +-
 .../src/explore/actions/exploreActions.ts          |  21 +-
 .../src/explore/actions/hydrateExplore.ts          |  20 +
 .../explore/components/ControlPanelsContainer.tsx  |   2 +-
 .../components/DataTablesPane/DataTablesPane.tsx   |   4 +-
 .../DataTablesPane/test/DataTablesPane.test.tsx    |   2 +-
 .../explore/components/DatasourcePanel/index.tsx   |   7 +-
 .../src/explore/components/ExploreChartPanel.jsx   |   7 +-
 .../ExploreViewContainer.test.tsx                  |   4 +-
 .../explore/components/PropertiesModal/index.tsx   |   9 +-
 .../src/explore/components/SaveModal.tsx           |   9 +-
 .../AnnotationLayerControl/AnnotationLayer.jsx     |  66 ++-
 .../AnnotationLayer.test.tsx                       |   8 +-
 .../ConditionalFormattingControl.tsx               |  37 +-
 .../controls/ConditionalFormattingControl/types.ts |   1 +
 .../index.tsx                                      |  11 +-
 .../useExploreAdditionalActionsMenu/index.jsx      |   4 +-
 .../getFormDataWithDashboardContext.ts             |  74 +--
 superset-frontend/src/featureFlags.ts              |   5 +-
 .../alerts}/AlertReportModal.test.jsx              |   2 +-
 .../alerts}/AlertReportModal.test.tsx              |   2 +-
 .../alert => features/alerts}/AlertReportModal.tsx |  78 +--
 .../components/AlertReportCronScheduler.test.tsx   |   0
 .../components/AlertReportCronScheduler.tsx        |   2 +-
 .../alerts}/components/AlertStatusIcon.tsx         |   0
 .../alerts}/components/NotificationMethod.tsx      |   2 +-
 .../alerts}/components/RecipientIcon.tsx           |   0
 .../{views/CRUD/alert => features/alerts}/types.ts |   5 +
 .../allEntities}/AllEntitiesTable.tsx              |   4 +-
 .../AnnotationLayerModal.test.jsx                  |   2 +-
 .../annotationLayers}/AnnotationLayerModal.tsx     |   0
 .../annotationLayers}/types.ts                     |   0
 .../annotations}/AnnotationModal.test.jsx          |   2 +-
 .../annotations}/AnnotationModal.tsx               |   0
 .../annotation => features/annotations}/types.ts   |   0
 .../CRUD/chart => features/charts}/ChartCard.tsx   |   4 +-
 .../cssTemplates}/CssTemplateModal.test.jsx        |   2 +-
 .../cssTemplates}/CssTemplateModal.tsx             |   0
 .../cssTemplates}/types.ts                         |   0
 .../dashboards}/DashboardCard.tsx                  |   4 +-
 .../dashboard => features/dashboards}/types.ts     |   0
 .../DatabaseConnectionForm/CommonParameters.tsx    |   0
 .../DatabaseConnectionForm/EncryptedField.tsx      |   0
 .../DatabaseConnectionForm/TableCatalog.tsx        |   0
 .../DatabaseConnectionForm/ValidatedInputField.tsx |   0
 .../DatabaseModal/DatabaseConnectionForm/index.tsx |   0
 .../databases}/DatabaseModal/ExtraOptions.tsx      |   2 +-
 .../databases}/DatabaseModal/ModalHeader.tsx       |   0
 .../databases}/DatabaseModal/SSHTunnelForm.tsx     |   1 -
 .../databases}/DatabaseModal/SSHTunnelSwitch.tsx   |   0
 .../databases}/DatabaseModal/SqlAlchemyForm.tsx    |   1 -
 .../databases}/DatabaseModal/index.test.tsx        |   5 +-
 .../databases}/DatabaseModal/index.tsx             |   8 +-
 .../databases}/DatabaseModal/styles.ts             |   0
 .../data/database => features/databases}/state.ts  |   0
 .../data/database => features/databases}/types.ts  |   0
 .../DatasetPanel/DatasetPanel.stories.tsx          |   0
 .../AddDataset/DatasetPanel/DatasetPanel.test.tsx  |   2 +-
 .../AddDataset/DatasetPanel/DatasetPanel.tsx       |   2 +-
 .../AddDataset/DatasetPanel/MessageContent.tsx     |   0
 .../datasets}/AddDataset/DatasetPanel/fixtures.ts  |   2 +-
 .../datasets}/AddDataset/DatasetPanel/index.tsx    |   2 +-
 .../datasets}/AddDataset/DatasetPanel/types.ts     |   0
 .../AddDataset/EditDataset/EditDataset.test.tsx    |   0
 .../EditDataset/UsageTab/UsageTab.test.tsx         |   0
 .../AddDataset/EditDataset/UsageTab/index.tsx      |   0
 .../datasets}/AddDataset/EditDataset/index.tsx     |   2 +-
 .../datasets}/AddDataset/Footer/Footer.test.tsx    |   2 +-
 .../datasets}/AddDataset/Footer/index.tsx          |   0
 .../datasets}/AddDataset/Header/Header.test.tsx    |   4 +-
 .../datasets}/AddDataset/Header/index.tsx          |  10 +-
 .../AddDataset/LeftPanel/LeftPanel.test.tsx        |   4 +-
 .../datasets}/AddDataset/LeftPanel/index.tsx       |   2 +-
 .../AddDataset/RightPanel/RightPanel.test.tsx      |   2 +-
 .../datasets}/AddDataset/RightPanel/index.tsx      |   0
 .../datasets}/AddDataset/types.tsx                 |   0
 .../datasets}/DatasetLayout/DatasetLayout.test.tsx |  12 +-
 .../datasets}/DatasetLayout/index.tsx              |   2 +-
 .../datasets}/DuplicateDatasetModal.tsx            |   0
 .../dataset => features/datasets}/constants.ts     |   0
 .../datasets/hooks/useDatasetLists.ts}             |  93 +---
 .../datasets/hooks/useGetDatasetRelatedCounts.ts   |  55 ++
 .../metadataBar/DatasetMetadataBar.stories.tsx     |   2 +-
 .../metadataBar/useDatasetMetadataBar.test.tsx     |  70 ++-
 .../datasets/metadataBar/useDatasetMetadataBar.tsx |  41 +-
 .../data/dataset => features/datasets}/styles.ts   |   0
 .../data/dataset => features/datasets}/types.ts    |   0
 .../home}/ActivityTable.test.tsx                   |   2 +-
 .../welcome => features/home}/ActivityTable.tsx    |   4 +-
 .../welcome => features/home}/ChartTable.test.tsx  |   3 +-
 .../CRUD/welcome => features/home}/ChartTable.tsx  |   4 +-
 .../home}/DashboardTable.test.tsx                  |   4 +-
 .../welcome => features/home}/DashboardTable.tsx   |   4 +-
 .../welcome => features/home}/EmptyState.test.tsx  |   2 +-
 .../CRUD/welcome => features/home}/EmptyState.tsx  |   0
 .../home}/LanguagePicker.test.tsx                  |   0
 .../home}/LanguagePicker.tsx                       |   0
 .../components => features/home}/Menu.test.tsx     |   0
 .../{views/components => features/home}/Menu.tsx   |   0
 .../home}/RightMenu.test.tsx                       |   2 +-
 .../components => features/home}/RightMenu.tsx     |  11 +-
 .../home}/SavedQueries.test.tsx                    |   5 +-
 .../welcome => features/home}/SavedQueries.tsx     |   6 +-
 .../components => features/home}/SubMenu.test.tsx  |   0
 .../components => features/home}/SubMenu.tsx       |   7 +-
 .../common.ts => features/home/commonMenuData.ts}  |   0
 .../{views/components => features/home}/types.ts   |  10 +
 .../queries}/QueryPreviewModal.test.tsx            |   2 +-
 .../queries}/QueryPreviewModal.tsx                 |   4 +-
 .../queries}/SavedQueryPreviewModal.test.jsx       |   2 +-
 .../queries}/SavedQueryPreviewModal.tsx            |   4 +-
 .../queries/SyntaxHighlighterCopy.tsx}             |   0
 .../features/queries/hooks/useQueryPreviewState.ts |  76 +++
 .../src/{views/CRUD => features}/tags/TagCard.tsx  |   6 +-
 superset-frontend/src/{ => features/tags}/tags.ts  |   0
 .../components/Select/SelectFilterPlugin.tsx       |  19 +-
 superset-frontend/src/middleware/asyncEvent.ts     |   3 +-
 .../pages/AlertReportList/AlertReportList.test.jsx |   2 +-
 .../src/pages/AlertReportList/index.tsx            |  11 +-
 superset-frontend/src/pages/AllEntities/index.tsx  |   2 +-
 .../AnnotationLayerList.test.jsx                   |   4 +-
 .../src/pages/AnnotationLayerList/index.tsx        |   6 +-
 .../pages/AnnotationList/AnnotationList.test.jsx   |   2 +-
 .../src/pages/AnnotationList/index.tsx             |   6 +-
 .../src/pages/ChartCreation/index.tsx              |   9 +-
 superset-frontend/src/pages/ChartList/index.tsx    |   7 +-
 .../pages/CssTemplateList/CssTemplateList.test.jsx |   2 +-
 .../src/pages/CssTemplateList/index.tsx            |   6 +-
 .../src/pages/DashboardList/index.tsx              |  12 +-
 .../src/pages/DatabaseList/DatabaseList.test.jsx   |   4 +-
 superset-frontend/src/pages/DatabaseList/index.tsx |  12 +-
 .../src/pages/DatasetCreation/index.tsx            |  16 +-
 .../src/pages/DatasetList/DatasetList.test.tsx     |   8 +-
 superset-frontend/src/pages/DatasetList/index.tsx  |  15 +-
 .../src/pages/ExecutionLogList/index.tsx           |   6 +-
 superset-frontend/src/pages/Home/Home.test.tsx     |   2 +-
 superset-frontend/src/pages/Home/index.tsx         | 206 ++++----
 .../QueryHistoryList/QueryHistoryList.test.tsx     |   4 +-
 .../src/pages/QueryHistoryList/index.tsx           |   6 +-
 .../pages/SavedQueryList/SavedQueryList.test.jsx   |   2 +-
 .../src/pages/SavedQueryList/index.tsx             |  13 +-
 superset-frontend/src/pages/Tags/index.tsx         |  10 +-
 .../src/profile/components/Favorites.tsx           |  31 +-
 superset-frontend/src/profile/types.ts             |   9 +
 superset-frontend/src/types/bootstrapTypes.ts      |   2 +-
 .../types.ts => utils/cachedSupersetGet.ts}        |  16 +-
 superset-frontend/src/utils/hostNamesConfig.js     |   7 +-
 superset-frontend/src/utils/localStorageHelpers.ts |   2 +
 superset-frontend/src/utils/simpleFilterToAdhoc.ts |  69 +++
 superset-frontend/src/views/App.tsx                |   2 +-
 superset-frontend/src/views/CRUD/hooks.ts          |  23 +-
 superset-frontend/src/views/CRUD/utils.test.tsx    |   2 +-
 superset-frontend/src/views/CRUD/utils.tsx         |   2 +-
 superset-frontend/src/views/menu.tsx               |  16 +-
 superset-frontend/src/views/types.ts               |   2 +-
 superset-websocket/package-lock.json               | 380 ++++++++++++--
 superset-websocket/package.json                    |   6 +-
 superset/charts/api.py                             | 103 +++-
 superset/charts/commands/export.py                 |   2 +-
 superset/charts/dao.py                             |  30 ++
 superset/charts/filters.py                         |  43 +-
 superset/charts/post_processing.py                 |  11 +-
 superset/common/query_context.py                   |   5 +-
 superset/common/query_context_processor.py         |  12 +-
 superset/config.py                                 |   4 +
 superset/connectors/sqla/models.py                 |  44 +-
 superset/constants.py                              |   3 +
 superset/dashboards/api.py                         |  90 ++++
 .../dashboards/commands/importers/v1/__init__.py   |   9 +-
 superset/dashboards/dao.py                         |  29 ++
 superset/db_engine_specs/bigquery.py               |  99 ++--
 superset/extensions/ssh.py                         |   4 +-
 ...2af1b_drop_postgres_enum_constrains_for_tags.py |  47 ++
 superset/models/dashboard.py                       |  15 +-
 superset/models/helpers.py                         |  11 +
 superset/models/slice.py                           |  21 +-
 superset/models/sql_lab.py                         |  17 +-
 superset/translations/zh/LC_MESSAGES/messages.po   |  18 +-
 superset/utils/csv.py                              |   3 +
 superset/utils/pandas_postprocessing/pivot.py      |   2 +-
 superset/views/base.py                             |   3 +
 superset/views/core.py                             |  49 +-
 superset/viz.py                                    |  16 +-
 tests/integration_tests/charts/api_tests.py        |  98 +++-
 tests/integration_tests/charts/commands_tests.py   |  50 +-
 tests/integration_tests/charts/data/api_tests.py   |   8 +
 tests/integration_tests/csv_upload_tests.py        |   5 +-
 tests/integration_tests/dashboards/api_tests.py    |  70 +++
 .../integration_tests/dashboards/commands_tests.py |   3 +
 .../db_engine_specs/bigquery_tests.py              |  47 +-
 tests/integration_tests/tags/dao_tests.py          |   5 +-
 .../integration_tests/tasks/async_queries_tests.py |   1 +
 tests/unit_tests/charts/dao/dao_tests.py           |  35 +-
 tests/unit_tests/charts/test_post_processing.py    |  11 +-
 tests/unit_tests/dashboards/dao_tests.py           |  79 +++
 354 files changed, 5065 insertions(+), 1684 deletions(-)