Compare commits

..

61 Commits
1.4.2 ... 1.3.0

Author SHA1 Message Date
Ville Brofeldt
6d19de8f66 update changelog and updating 2021-08-16 09:36:28 +03:00
Elizabeth Thompson
0e7b220917 check roles before fetching reports (#16260)
(cherry picked from commit 3709131089)
2021-08-16 08:45:36 +03:00
Beto Dealmeida
3bfb4d689a fix: pivot columns with ints for name (#16259)
(cherry picked from commit 9b2dffeb1d)
2021-08-16 08:45:36 +03:00
Phillip Kelley-Dotson
6599262cfe fix examples tab for dashboard (#16253)
(cherry picked from commit a5dbe6a14d)
2021-08-16 08:45:36 +03:00
Phillip Kelley-Dotson
9ca7e0b752 chore: bump superset-ui packages to 0.17.84 (#16251)
* initial bump

* commit pack-lock file

(cherry picked from commit f94695480a)
2021-08-16 08:45:36 +03:00
Kamil Gabryjelski
90ad28bbe6 fix(dashboard): cross filter chart highlight when filters badge icon clicked (#16233)
* fix(dashboard): cross filter chart highlight when filters badge icon pressed

* Fix tests

* Fix tests

* break out label logic

Co-authored-by: Ville Brofeldt <ville.v.brofeldt@gmail.com>
(cherry picked from commit 517a678cd7)
2021-08-16 08:45:35 +03:00
Beto Dealmeida
52f747b3fc fix: validate_parameters and query (#16241)
* fix: validate_parameters and query

* add onQueryChange

(cherry picked from commit 5d3d6b6eae)
2021-08-16 08:45:35 +03:00
Evan Rusackas
56897ab14c fix: Remove Advanced Analytics tag for 2 charts (#16240)
* removing AA tag from TimeTableChartPlugin

* package bump for echarts (removes AA tag there)

* package-lock bump for new echarts plugin

(cherry picked from commit cdcc161846)
2021-08-16 08:45:35 +03:00
Elizabeth Thompson
f36a7f0d2c fix: remove encryption from db params (#16214)
* remove encryption from db params

* Update superset/db_engine_specs/base.py

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>
(cherry picked from commit 67c4c0116e)
2021-08-16 08:45:34 +03:00
Kamil Gabryjelski
90f432e18c fix(explore): conditional formatting value validators (#16230)
* fix(explore): conditional formatting value validators

* Fix typing, make validator more generic

* Remove commented code

(cherry picked from commit a16e290765)
2021-08-16 08:45:34 +03:00
Phillip Kelley-Dotson
f749834a1a initial fix (#16212)
(cherry picked from commit c79de7abd7)
2021-08-16 08:45:34 +03:00
Phillip Kelley-Dotson
31c57db0aa fix: sorting on "Modified By" in chart table (#16208)
* initial fix

* Update ChartList.tsx

change sort to first name

(cherry picked from commit b4555dfa4f)
2021-08-16 08:45:34 +03:00
Kamil Gabryjelski
f56a25d2d9 fix(explore): adhoc metrics popover resets label after hovering outside (#16196)
* fix(explore): adhoc metrics popover resets label after hovering outside

* Remove irrelevant tests and skip rest

* Use ensureIsArray

(cherry picked from commit ccfc95fbe6)
2021-08-16 08:45:34 +03:00
AAfghahi
185eaf7636 feat: Changing Dataset names (#16199)
* added google alert

* changing Dataset Names

(cherry picked from commit 6c304b83a9)
2021-08-16 08:45:33 +03:00
Kamil Gabryjelski
4c6a2597b4 fix(explore): metric label disappearing in some scenarios (#16190)
(cherry picked from commit 98fc29cbbb)
2021-08-16 08:45:33 +03:00
Ville Brofeldt
bc5e05b1df chore: bump superset-ui to 0.17.82 (#16186)
(cherry picked from commit 4df3672baa)
2021-08-16 08:45:33 +03:00
Elizabeth Thompson
52ae86de05 update covid dashboard (#16183)
(cherry picked from commit 3aefa6925b)
2021-08-16 08:45:33 +03:00
Phillip Kelley-Dotson
9dc44a443e fix: change listivew card layouts to the new homepage card layout (#16171)
* initial commit

* removing CardStylesOverrides (unused)

Co-authored-by: Evan Rusackas <evan@preset.io>
(cherry picked from commit a30d884cfc)
2021-08-16 08:45:32 +03:00
Junlin Chen
79ad7e8529 chore: switch back tag name to popular from highly-used (#16174)
* chore: switch back tag name to popular from highly-used

* new package lock

* new package lock with npm 7

* fix lint

* remove package changes

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>
(cherry picked from commit 9841c78967)
2021-08-16 08:45:32 +03:00
Phillip Kelley-Dotson
a9298ecb9e fix: ensure created user entities do not show inside examples (#16176)
* initial commit

* fix lint

* Update superset-frontend/src/views/CRUD/utils.tsx

Co-authored-by: Evan Rusackas <evan@preset.io>

* Update superset-frontend/src/views/CRUD/utils.tsx

Co-authored-by: Evan Rusackas <evan@preset.io>

* Update superset-frontend/src/views/CRUD/utils.tsx

Co-authored-by: Evan Rusackas <evan@preset.io>

Co-authored-by: Evan Rusackas <evan@preset.io>
(cherry picked from commit a0c9b9d9c2)
2021-08-16 08:45:32 +03:00
AAfghahi
61a6795961 feat: CLI cleanup (#16178)
* added google alert

* removing datasets from cli

(cherry picked from commit 6df16c4b1f)
2021-08-16 08:45:32 +03:00
Elizabeth Thompson
93de225f19 feat: change query predicate to text (#16160)
* change query predicate to text

* make input multiline

* remove value that is too long for the downgrade

* keep logging lint rule

(cherry picked from commit 628169a171)
2021-08-16 08:45:32 +03:00
AAfghahi
2b6a8652ec feat: Added multi-regional IPs to Database Connections (#16170)
* added google alert

* multi-regional IPs

* beto revisions

* Update superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>

* Update superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>

* Update superset-frontend/src/views/CRUD/data/database/DatabaseModal/index.tsx

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>
(cherry picked from commit 2dc0bdda5d)
2021-08-16 08:45:32 +03:00
Beto Dealmeida
077c6378ed fix: isDynamic function (#16175)
* fix: isDynamic function

* trigger tests

(cherry picked from commit 9f52c103ac)
2021-08-16 08:45:31 +03:00
Elizabeth Thompson
bab7e7a842 feat: add chart image info to reports from charts (#16158)
* refetch reports on props update

* add chart types to reports

(cherry picked from commit a3102488a1)
2021-08-16 08:45:31 +03:00
Beto Dealmeida
77415685ce fix: revert data endpoint name (#16162)
(cherry picked from commit 7b3fce7e81)
2021-08-16 08:45:31 +03:00
Hugh A. Miles II
3bf5852d67 fix: turn on SSL in database edit form show 500 error (#16151)
* fix error for query.update

* converrt before making request

* fix query params

* remove unchanged files

* this

* update tsconfig

(cherry picked from commit 3f86a54ac1)
2021-08-16 08:45:31 +03:00
Phillip Kelley-Dotson
cf922e1dcf fix: ensure that users viewing chart does not automatically save edit data (#16077)
* add last_change_at migration

* add last_saved_by db migration

* finish rest of api migration

* run precommit

* fix name

* run precommitt

* remove unused mods

* merge migrations

* Update superset/migrations/versions/6d20ba9ecb33_add_last_saved_at_to_slice_model.py

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>

* Update superset/migrations/versions/6d20ba9ecb33_add_last_saved_at_to_slice_model.py

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>

* Update superset/migrations/versions/f6196627326f_update_chart_permissions.py

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>

* fix test

* precommit

* remove print

* fix test

* change test

* test commit

* test 2

* test 3

* third time the charm

* fix put req

Co-authored-by: Beto Dealmeida <roberto@dealmeida.net>
(cherry picked from commit f0e3b68cc2)
2021-08-16 08:45:31 +03:00
Ville Brofeldt
630b49f4a3 feat(cross-filters): add support for temporal filters (#16139)
* feat(cross-filters): add support for temporal filters

* fix test

* make filter optional

* remove mocks

* fix more tests

* remove unnecessary optionality

* fix even more tests

* bump superset-ui

* add isExtra to schema

* address comments

* fix presto test

(cherry picked from commit 63ace7b288)
2021-08-16 08:45:30 +03:00
Elizabeth Thompson
a38115d517 add config to hide some user menu items (#16156)
(cherry picked from commit 5488a8a948)
2021-08-16 08:45:30 +03:00
Phillip Kelley-Dotson
74b37c3631 feat: add sticky state to tables and loadingcards state. (#16102)
* initial feat commit

* fix chart and dash rendering onload

* Update superset-frontend/src/views/CRUD/welcome/Welcome.tsx

Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>

* fix jumpyness and add const

Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
(cherry picked from commit a70248736f)
2021-08-16 08:45:30 +03:00
Michael S. Molina
2d59be3fd3 fix: Safari is not showing scroll bars in Explore (#16089)
(cherry picked from commit 273ab3d257)
2021-08-16 08:45:29 +03:00
Michael S. Molina
cfeb5580b8 fix: Multiple dashboard refresh triggers for the same session (#16094)
(cherry picked from commit 07f33998ac)
2021-08-16 08:45:29 +03:00
Yongjie Zhao
33b56bb31d fix: boolean type into SQL 'in' operator (#16107)
* fix: boolean type into SQL 'in' operator

* fix ut

* fix ut again

* update url

* remove blank line

(cherry picked from commit bb1d8fe4ef)
2021-08-16 08:45:29 +03:00
Jesse Yang
8146a5cad3 fix(dashboard): 500 error caused by data_for_slices API (#16053)
(cherry picked from commit 490890de23)
2021-08-16 08:45:29 +03:00
Ville Brofeldt
7fa5a26147 update version and changelog 2021-08-10 08:35:35 +03:00
Lyndsi Kay Williams
762945b3f3 additional params field fixed (#16161)
(cherry picked from commit 3712ee02fa)
2021-08-10 07:53:24 +03:00
AAfghahi
80d09e63b2 fix: change Alert Permissions (#16118)
* added google alert

* reworked permissions

(cherry picked from commit 606a7bf429)
2021-08-10 07:53:24 +03:00
AAfghahi
f59fe808f8 feat: better errors for report in charts and dashboard (#16131)
* added google alert

* better errors and report actions

(cherry picked from commit 5ce38839e7)
2021-08-10 07:53:24 +03:00
AAfghahi
8383b2c03d feat: added google alert to DB Connection Form (#16095)
* added google alert

* using superset_text

* made google alert public and others private

* Hugh revisions

(cherry picked from commit a51851308b)
2021-08-10 07:53:24 +03:00
Kamil Gabryjelski
951bbcf276 fix(explore): dnd error when dragging metric if multi: false (#16088)
* fix(explore): dnd error when dragging metric if multi: false

* Fix error for non-dnd controls

(cherry picked from commit b7cc89c6d4)
2021-08-10 07:53:23 +03:00
Kamil Gabryjelski
60ad321dcd chore(explore): change dnd placeholders (#16116)
* chore(explore): change dnd placeholders

* Fix tests and lint

(cherry picked from commit 6ac4f4ef2f)
2021-08-10 07:53:23 +03:00
Maxime Beauchemin
3e98e9cd79 chore: add stats logging to thumbnail api (#16133)
(cherry picked from commit df50a47777)
2021-08-10 07:53:23 +03:00
Geido
1273cfb6b5 Adjust width (#16092)
(cherry picked from commit b07c80a839)
2021-08-10 07:53:23 +03:00
Yongjie Zhao
5b04835d6e fix: virtual dataset wont work (#16132)
(cherry picked from commit 3bbcc30d69)
2021-08-10 07:53:22 +03:00
Beto Dealmeida
eb2d8882cf fix: migrate_roles (#16098)
(cherry picked from commit 28c383af68)
2021-08-10 07:53:22 +03:00
Kamil Gabryjelski
d5602a6017 fix(explore): revert dnd column dependency array change to fix infinite rerenders (#16115)
* fix(explore): revert dnd column dependency array change to fix infinite rerenders

* Remove console.log

* Remove comment

(cherry picked from commit 772da8de63)
2021-08-10 07:53:22 +03:00
ʈᵃᵢ
95679d7594 fix: move watermark to about section (#16097)
(cherry picked from commit b80f018691)
2021-08-10 07:53:22 +03:00
David Aaron Suddjian
0771475383 fix(explore): drag & drop column select component triggering onChange unnecessarily (#16073)
* fix(explore): avoid sync until after first render

* fix example

(cherry picked from commit e6292a89bb)
2021-08-10 07:53:22 +03:00
David Aaron Suddjian
a688da5aa7 fix(dashboard): user id can be null when there is an anonymous user (#15592)
(cherry picked from commit 23072161e2)
2021-08-10 07:53:21 +03:00
Beto Dealmeida
0bacb2780b fix: load tabbed dash only for tests (#16091)
(cherry picked from commit b72fd7b9f4)
2021-08-10 07:53:21 +03:00
AAfghahi
dec3ff770f change button color (#16093)
(cherry picked from commit e6274e0764)
2021-08-10 07:53:21 +03:00
Kamil Gabryjelski
4caecd7202 chore(explore): bump deckgl to 0.4.9 (#16086)
(cherry picked from commit af204ff449)
2021-08-10 07:53:21 +03:00
Beto Dealmeida
8506e4f555 chore: simplify chart permissions (#16078)
(cherry picked from commit 1dbd1e9f02)
2021-08-10 07:53:20 +03:00
Kamil Gabryjelski
b6e4b0d6c1 chore(explore): Create new entrypoints for Echarts Timeseries (#15942)
* feat(explore): Create new entrypoints for Echarts Timeseries

* Change order of some charts

* bump superset-ui

* also bump echarts package

* fix UT

Co-authored-by: Ville Brofeldt <ville.v.brofeldt@gmail.com>
(cherry picked from commit a59d458e41)
2021-08-10 07:53:20 +03:00
Hugh A. Miles II
88ee092fb2 fix: Remove grey bar for TableElement component when metadata is empty (#16054)
* create serialize json function

* remove grey space with no metadata

* remove console log

(cherry picked from commit 11a2d4dfdd)
2021-08-10 07:53:20 +03:00
Ville Brofeldt
7cfa0e7b8c feat(explore): add automatic conditional formatter to pivot table v2 (#16045)
(cherry picked from commit 7ef97a54e2)
2021-08-10 07:53:20 +03:00
AAfghahi
d320a97ae6 fix: Adding report bug (#16065)
* report add fix

* added theme

(cherry picked from commit 4359650b7d)
2021-08-10 07:53:20 +03:00
Ville Brofeldt
5c2835c266 fix(native-filters): add support for boolean cols to select (#16061)
(cherry picked from commit 86cecaeec5)
2021-08-10 07:53:19 +03:00
Michael S. Molina
aec507d35c fix: Fix the Select unselect for object values (#16062)
(cherry picked from commit 1917464d2b)
2021-08-10 07:53:19 +03:00
Ville Brofeldt
3c4f4dbf06 chore: bump superset-ui to 0.17.78 (#16058)
(cherry picked from commit 7332055ff6)
2021-08-10 07:53:19 +03:00
1245 changed files with 66405 additions and 49249 deletions

1
.gitattributes vendored
View File

@@ -1 +0,0 @@
docker/**/*.sh text eol=lf

6
.github/CODEOWNERS vendored
View File

@@ -3,6 +3,6 @@
/superset/migrations/ @apache/superset-committers
# Notify Preset team when ephemeral env settings are changed
.github/workflows/ecs-task-definition.json @robdiciuccio @craig-rueda @rusackas @eschutho @dpgaspar @nytai @mistercrunch
.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
.github/workflows/ecs-task-definition.json @robdiciuccio @craig-rueda @willbarrett @rusackas @eschutho @dpgaspar @nytai @mistercrunch
.github/workflows/docker-ephemeral-env.yml @robdiciuccio @craig-rueda @willbarrett @rusackas @eschutho @dpgaspar @nytai @mistercrunch
.github/workflows/ephemeral*.yml @robdiciuccio @craig-rueda @willbarrett @rusackas @eschutho @dpgaspar @nytai @mistercrunch

View File

@@ -7,13 +7,6 @@ labels: "#bug"
A clear and concise description of what the bug is.
#### How to reproduce the bug
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
### Expected results
what you expected to happen.
@@ -26,12 +19,17 @@ what actually happens.
If applicable, add screenshots to help explain your problem.
#### How to reproduce the bug
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
### Environment
(please complete the following information):
- browser type and version:
- superset version: `superset version`
- python version: `python --version`
- node.js version: `node -v`

View File

@@ -1,9 +1,3 @@
<!---
Please write the PR title following the conventions at https://www.conventionalcommits.org/en/v1.0.0/
Example:
fix(dashboard): load charts correctly
-->
### SUMMARY
<!--- Describe the change below, including rationale and design decisions -->
@@ -17,7 +11,6 @@ fix(dashboard): load charts correctly
<!--- Check any relevant boxes with "x" -->
<!--- HINT: Include "Fixes #nnn" if you are fixing an existing issue -->
- [ ] Has associated issue:
- [ ] Required feature flags:
- [ ] Changes UI
- [ ] Includes DB Migration (follow approval process in [SIP-59](https://github.com/apache/superset/issues/13351))
- [ ] Migration is atomic, supports rollback & is backwards-compatible

View File

@@ -55,6 +55,7 @@ npm-install() {
cd "$GITHUB_WORKSPACE/superset-frontend"
# cache-restore npm
say "::group::Install npm packages"
echo "npm: $(npm --version)"
echo "node: $(node --version)"
@@ -68,7 +69,7 @@ build-assets() {
cd "$GITHUB_WORKSPACE/superset-frontend"
say "::group::Build static assets"
npm run build
npm run build -- --no-progress
say "::endgroup::"
}
@@ -80,7 +81,7 @@ build-instrumented-assets() {
if [[ -f "$ASSETS_MANIFEST" ]]; then
echo 'Skip frontend build because instrumented static assets already exist.'
else
npm run build-instrumented
npm run build-instrumented -- --no-progress
cache-save instrumented-assets
fi
say "::endgroup::"

View File

@@ -67,12 +67,13 @@ jobs:
if: steps.check.outcome == 'failure'
uses: actions/setup-python@v2
with:
python-version: "3.8"
python-version: "3.7"
- name: OS dependencies
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies
with:
run: apt-get-install
run: |
apt-get-install
- name: Install python dependencies
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies
@@ -84,31 +85,32 @@ jobs:
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies
with:
run: setup-postgres
run: |
setup-postgres
- name: Import test data
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies
with:
run: testdata
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
run: |
testdata
- name: Install npm dependencies
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies
with:
run: npm-install
run: |
npm-install
- name: Build javascript packages
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies
with:
run: build-instrumented-assets
run: |
build-instrumented-assets
- name: Install cypress
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies
with:
run: cypress-install
run: |
cypress-install
- name: Run Cypress
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies

View File

@@ -18,8 +18,6 @@ jobs:
with:
persist-credentials: false
submodules: recursive
- name: Check npm lock file version
run: ./scripts/ci_check_npm_lock_version.sh ./superset-frontend/package-lock.json
- name: Check if frontend changes are present
id: check
env:
@@ -27,11 +25,6 @@ jobs:
PR_NUMBER: ${{ github.event.pull_request.number }}
continue-on-error: true
run: ./scripts/ci_check_no_file_changes.sh frontend
- name: Setup Node.js
if: steps.check.outcome == 'failure'
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Install dependencies
if: steps.check.outcome == 'failure'
uses: ./.github/actions/cached-dependencies

View File

@@ -22,7 +22,7 @@ jobs:
- uses: actions/setup-python@v2
with:
python-version: 3.8
python-version: 3.7
- name: Set up chart-testing
uses: ./.github/actions/chart-testing-action

View File

@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8]
python-version: [3.7]
env:
PYTHONPATH: ${{ github.workspace }}
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
@@ -77,7 +77,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8, 3.9]
python-version: [3.7, 3.8]
env:
PYTHONPATH: ${{ github.workspace }}
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
@@ -141,7 +141,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8]
python-version: [3.7]
env:
PYTHONPATH: ${{ github.workspace }}
SUPERSET_CONFIG: tests.integration_tests.superset_test_config

View File

@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8]
python-version: [3.7]
steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v2
@@ -29,7 +29,6 @@ jobs:
continue-on-error: true
run: ./scripts/ci_check_no_file_changes.sh python
- name: Setup Python
if: steps.check.outcome == 'failure'
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
@@ -51,7 +50,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8]
python-version: [3.7]
steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v2
@@ -77,7 +76,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8]
python-version: [3.7]
steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v2

View File

@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8, 3.9]
python-version: [3.7,3.8]
env:
PYTHONPATH: ${{ github.workspace }}
steps:

View File

@@ -17,10 +17,6 @@ jobs:
with:
persist-credentials: false
submodules: recursive
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Install dependencies
uses: ./.github/actions/cached-dependencies
with:
@@ -35,7 +31,7 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8]
python-version: [3.7]
steps:
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v2

View File

@@ -24,10 +24,9 @@ repos:
hooks:
- id: isort
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.910
rev: v0.790
hooks:
- id: mypy
additional_dependencies: [types-all, types-redis]
- repo: https://github.com/peterdemin/pip-compile-multi
rev: v2.4.1
hooks:

View File

@@ -70,8 +70,7 @@ confidence=
# either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once). See also the "--disable" option for examples.
enable=
useless-suppression,
#enable=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
@@ -84,10 +83,14 @@ enable=
# --disable=W"
disable=
missing-docstring,
duplicate-code,
unspecified-encoding,
# re-enable once this no longer raises false positives
too-many-instance-attributes
too-many-lines,
ungrouped-imports,
import-outside-toplevel,
raise-missing-from,
super-with-arguments,
too-few-public-methods,
too-many-locals,
[REPORTS]
@@ -120,7 +123,7 @@ evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / stateme
[BASIC]
# Good variable names which should always be accepted, separated by a comma
good-names=_,df,ex,f,i,id,j,k,l,o,pk,Run,ts,v,x,y
good-names=_,df,ex,f,i,id,j,k,l,o,pk,Run,ts,v,x
# Bad variable names which should always be refused, separated by a comma
bad-names=fd,foo,bar,baz,toto,tutu,tata

File diff suppressed because it is too large Load Diff

View File

@@ -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-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw), please adhere to the following rules:
If you decide to join the [Community Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ), please adhere to the following rules:
**1. Treat everyone in the community with respect.**

View File

@@ -409,18 +409,18 @@ referenced in the rst, e.g.
.. image:: _static/images/tutorial/tutorial_01_sources_database.png
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.
images (and any other static assets) to the `superset-frontend/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.
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.
For example, the image referenced above actually lives in `superset-frontend/images/tutorial`. Since the image is moved during the documentation build process, the docs reference the image in `_static/images/tutorial` instead.
### Flask server
#### OS Dependencies
Make sure your machine meets the [OS dependencies](https://superset.apache.org/docs/installation/installing-superset-from-scratch#os-dependencies) before following these steps.
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:
@@ -522,12 +522,7 @@ Frontend assets (TypeScript, JavaScript, CSS, and images) must be compiled in or
##### nvm and node
First, be sure you are using the following versions of Node.js and npm:
- `Node.js`: Version 16
- `npm`: Version 7
We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage your node environment:
First, be sure you are using recent versions of Node.js and npm. We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage your node environment:
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash
@@ -545,6 +540,12 @@ sh -c "$(curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install
For those interested, you may also try out [avn](https://github.com/nvm-sh/nvm#deeper-shell-integration) to automatically switch to the node version that is required to run Superset frontend.
We have upgraded our `package-lock.json` to use `lockfileversion: 2` from npm 7, so please make sure you have installed npm 7, too:
```bash
npm install -g npm@7
```
#### Install dependencies
Install third-party dependencies listed in `package.json` via:
@@ -753,21 +754,15 @@ Note that the test environment uses a temporary directory for defining the
SQLite databases which will be cleared each time before the group of test
commands are invoked.
There is also a utility script included in the Superset codebase to run python integration tests. The [readme can be
There is also a utility script included in the Superset codebase to run python tests. The [readme can be
found here](https://github.com/apache/superset/tree/master/scripts/tests)
To run all integration tests for example, run this script from the root directory:
To run all tests for example, run this script from the root directory:
```bash
scripts/tests/run.sh
```
You can run unit tests found in './tests/unit_tests' for example with pytest. It is a simple way to run an isolated test that doesn't need any database setup
```bash
pytest ./link_to_test.py
```
### Frontend Testing
We use [Jest](https://jestjs.io/) and [Enzyme](https://airbnb.io/enzyme/) to test TypeScript/JavaScript. Tests can be run with:
@@ -812,7 +807,7 @@ npm install
npm run cypress-run-chrome
# run tests from a specific file
npm run cypress-run-chrome -- --spec cypress/integration/explore/link.test.ts
npm run cypress-run-chrome -- --spec cypress/integration/explore/link.test.js
# run specific file with video capture
npm run cypress-run-chrome -- --spec cypress/integration/dashboard/index.test.js --config video=true

View File

@@ -18,7 +18,7 @@
######################################################################
# PY stage that simply does a pip install on our requirements
######################################################################
ARG PY_VER=3.8.12
ARG PY_VER=3.7.9
FROM python:${PY_VER} AS superset-py
RUN mkdir /app \
@@ -45,7 +45,7 @@ RUN cd /app \
######################################################################
# Node stage to deal with static asset construction
######################################################################
FROM node:16 AS superset-node
FROM node:14 AS superset-node
ARG NPM_VER=7
RUN npm install -g npm@${NPM_VER}
@@ -64,7 +64,7 @@ RUN /frontend-mem-nag.sh \
# Next, copy in the rest and let webpack do its thing
COPY ./superset-frontend /app/superset-frontend
# This seems to be the most expensive step
# This is BY FAR the most expensive step (thanks Terser!)
RUN cd /app/superset-frontend \
&& npm run ${BUILD_CMD} \
&& rm -rf node_modules
@@ -73,7 +73,7 @@ RUN cd /app/superset-frontend \
######################################################################
# Final lean image...
######################################################################
ARG PY_VER=3.8.12
ARG PY_VER=3.7.9
FROM python:${PY_VER} AS lean
ENV LANG=C.UTF-8 \
@@ -94,7 +94,7 @@ RUN mkdir -p ${PYTHONPATH} \
libpq-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/
COPY --from=superset-py /usr/local/lib/python3.7/site-packages/ /usr/local/lib/python3.7/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 --from=superset-node /app/superset/static/assets /app/superset/static/assets

View File

@@ -15,8 +15,8 @@
# limitations under the License.
#
# Python version installed; we need 3.7-3.9
PYTHON=`command -v python3.9 || command -v python3.8 || command -v python3.7`
# Python version installed; we need 3.8 or 3.7
PYTHON=`command -v python3.8 || command -v python3.7`
.PHONY: install superset venv pre-commit
@@ -58,17 +58,14 @@ update-py:
update-js:
# Install js packages
cd superset-frontend; npm ci
cd superset-frontend; npm install
venv:
# Create a virtual environment and activate it (recommended)
if ! [ -x "${PYTHON}" ]; then echo "You need Python 3.7, 3.8 or 3.9 installed"; exit 1; fi
if ! [ -x "${PYTHON}" ]; then echo "You need Python 3.7 or 3.8 installed"; exit 1; fi
test -d venv || ${PYTHON} -m venv venv # setup a python3 virtualenv
. venv/bin/activate
activate:
source venv/bin/activate
pre-commit:
# setup pre commit dependencies
pip3 install -r requirements/integration.txt
@@ -84,17 +81,3 @@ py-lint: pre-commit
js-format:
cd superset-frontend; npm run prettier
flask-app:
flask run -p 8088 --with-threads --reload --debugger
node-app:
cd superset-frontend; npm run dev-server
build-cypress:
cd superset-frontend; npm run build-instrumented
cd superset-frontend/cypress-base; npm install
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

View File

@@ -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-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw)
[![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
[![Documentation](https://img.shields.io/badge/docs-apache.org-blue.svg)](https://superset.apache.org)
[![Dependencies Status](https://david-dm.org/apache/superset/status.svg?path=superset-frontend)](https://david-dm.org/apache/superset?path=superset-frontend)
@@ -50,27 +50,27 @@ A modern, enterprise-ready business intelligence web application.
**Gallery**
<kbd><a href="https://superset.apache.org/gallery"><img title="Gallery" src="superset-frontend/src/assets/images/screenshots/gallery.jpg"/></a></kbd><br/>
<kbd><a href="https://superset.apache.org/gallery"><img title="Gallery" src="superset-frontend/images/screenshots/gallery.jpg"/></a></kbd><br/>
**View Dashboards**
<kbd><img title="View Dashboards" src="superset-frontend/src/assets/images/screenshots/slack_dash.jpg"/></kbd><br/>
<kbd><img title="View Dashboards" src="superset-frontend/images/screenshots/slack_dash.jpg"/></kbd><br/>
**Slice & dice your data**
<kbd><img title="Slice & dice your data" src="superset-frontend/src/assets/images/screenshots/explore.jpg"/></kbd><br/>
<kbd><img title="Slice & dice your data" src="superset-frontend/images/screenshots/explore.jpg"/></kbd><br/>
**Query and visualize your data with SQL Lab**
<kbd><img title="SQL Lab" src="superset-frontend/src/assets/images/screenshots/sql_lab.jpg"/></kbd><br/>
<kbd><img title="SQL Lab" src="superset-frontend/images/screenshots/sql_lab.jpg"/></kbd><br/>
**Visualize geospatial data with deck.gl**
<kbd><img title="Geospatial" src="superset-frontend/src/assets/images/screenshots/geospatial_dash.jpg"/></kbd><br/>
<kbd><img title="Geospatial" src="superset-frontend/images/screenshots/geospatial_dash.jpg"/></kbd><br/>
**Choose from a wide array of visualizations**
<kbd><img title="Visualizations" src="superset-frontend/src/assets/images/screenshots/explore_visualizations.jpg"/></kbd><br/>
<kbd><img title="Visualizations" src="superset-frontend/images/screenshots/explore_visualizations.jpg"/></kbd><br/>
## Why Superset?
@@ -99,29 +99,29 @@ Superset can query data from any SQL-speaking datastore or data engine (e.g. Pre
Here are some of the major database solutions that are supported:
<p align="center">
<img src="superset-frontend/src/assets/images/redshift.png" alt="redshift" border="0" width="106" height="41"/>
<img src="superset-frontend/src/assets/images/google-biquery.png" alt="google-biquery" border="0" width="114" height="43"/>
<img src="superset-frontend/src/assets/images/snowflake.png" alt="snowflake" border="0" width="152" height="46"/>
<img src="superset-frontend/src/assets/images/trino.png" alt="trino" border="0" width="46" height="46"/>
<img src="superset-frontend/src/assets/images/presto.png" alt="presto" border="0" width="152" height="46"/>
<img src="superset-frontend/src/assets/images/druid.png" alt="druid" border="0" width="135" height="37" />
<img src="superset-frontend/src/assets/images/postgresql.png" alt="postgresql" border="0" width="132" height="81" />
<img src="superset-frontend/src/assets/images/mysql.png" alt="mysql" border="0" width="119" height="62" />
<img src="superset-frontend/src/assets/images/mssql-server.png" alt="mssql-server" border="0" width="93" height="74" />
<img src="superset-frontend/src/assets/images/db2.png" alt="db2" border="0" width="62" height="62" />
<img src="superset-frontend/src/assets/images/sqlite.png" alt="sqlite" border="0" width="102" height="45" />
<img src="superset-frontend/src/assets/images/sybase.png" alt="sybase" border="0" width="128" height="47" />
<img src="superset-frontend/src/assets/images/mariadb.png" alt="mariadb" border="0" width="83" height="63" />
<img src="superset-frontend/src/assets/images/vertica.png" alt="vertica" border="0" width="128" height="40" />
<img src="superset-frontend/src/assets/images/oracle.png" alt="oracle" border="0" width="121" height="66" />
<img src="superset-frontend/src/assets/images/firebird.png" alt="firebird" border="0" width="86" height="56" />
<img src="superset-frontend/src/assets/images/greenplum.png" alt="greenplum" border="0" width="140" height="45" />
<img src="superset-frontend/src/assets/images/clickhouse.png" alt="clickhouse" border="0" width="133" height="34" />
<img src="superset-frontend/src/assets/images/exasol.png" alt="exasol" border="0" width="106" height="59" />
<img src="superset-frontend/src/assets/images/monet-db.png" alt="monet-db" border="0" width="106" height="46" />
<img src="superset-frontend/src/assets/images/apache-kylin.png" alt="apache-kylin" border="0" width="56" height="64"/>
<img src="superset-frontend/src/assets/images/hologres.png" alt="hologres" border="0" width="71" height="64"/>
<img src="superset-frontend/src/assets/images/netezza.png" alt="netezza" border="0" width="64" height="64"/>
<img src="superset-frontend/images/redshift.png" alt="redshift" border="0" width="106" height="41"/>
<img src="superset-frontend/images/google-biquery.png" alt="google-biquery" border="0" width="114" height="43"/>
<img src="superset-frontend/images/snowflake.png" alt="snowflake" border="0" width="152" height="46"/>
<img src="superset-frontend/images/trino.png" alt="trino" border="0" width="46" height="46"/>
<img src="superset-frontend/images/presto.png" alt="presto" border="0" width="152" height="46"/>
<img src="superset-frontend/images/druid.png" alt="druid" border="0" width="135" height="37" />
<img src="superset-frontend/images/postgresql.png" alt="postgresql" border="0" width="132" height="81" />
<img src="superset-frontend/images/mysql.png" alt="mysql" border="0" width="119" height="62" />
<img src="superset-frontend/images/mssql-server.png" alt="mssql-server" border="0" width="93" height="74" />
<img src="superset-frontend/images/db2.png" alt="db2" border="0" width="62" height="62" />
<img src="superset-frontend/images/sqlite.png" alt="sqlite" border="0" width="102" height="45" />
<img src="superset-frontend/images/sybase.png" alt="sybase" border="0" width="128" height="47" />
<img src="superset-frontend/images/mariadb.png" alt="mariadb" border="0" width="83" height="63" />
<img src="superset-frontend/images/vertica.png" alt="vertica" border="0" width="128" height="40" />
<img src="superset-frontend/images/oracle.png" alt="oracle" border="0" width="121" height="66" />
<img src="superset-frontend/images/firebird.png" alt="firebird" border="0" width="86" height="56" />
<img src="superset-frontend/images/greenplum.png" alt="greenplum" border="0" width="140" height="45" />
<img src="superset-frontend/images/clickhouse.png" alt="clickhouse" border="0" width="133" height="34" />
<img src="superset-frontend/images/exasol.png" alt="exasol" border="0" width="106" height="59" />
<img src="superset-frontend/images/monet-db.png" alt="monet-db" border="0" width="106" height="46" />
<img src="superset-frontend/images/apache-kylin.png" alt="apache-kylin" border="0" width="56" height="64"/>
<img src="superset-frontend/images/hologres.png" alt="hologres" border="0" width="71" height="64"/>
<img src="superset-frontend/images/netezza.png" alt="netezza" border="0" width="64" height="64"/>
</p>
**A more comprehensive list of supported databases** along with the configuration instructions can be found
@@ -136,7 +136,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-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw)
- [Join our community's Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
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)

View File

@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
FROM python:3.8-buster
FROM python:3.7-buster
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset

View File

@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
FROM python:3.8-buster
FROM python:3.7-buster
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset

View File

@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
FROM python:3.8-buster
FROM python:3.7-buster
ARG VERSION
RUN git clone --depth 1 --branch ${VERSION} https://github.com/apache/superset.git /superset

View File

@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
FROM python:3.8-buster
FROM python:3.7-buster
RUN apt-get update -y
RUN apt-get install -y jq

View File

@@ -29,8 +29,6 @@ on the Superset Slack. People crafting releases and those interested in
partaking in the process should join the channel.
## Release notes for recent releases
- [1.3](release-notes-1-3/README.md)
- [1.2](release-notes-1-2/README.md)
- [1.1](release-notes-1-1/README.md)
- [1.0](release-notes-1-0/README.md)

View File

@@ -13,6 +13,9 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# pylint: disable=no-value-for-parameter
import csv as lib_csv
import os
import re
@@ -381,12 +384,12 @@ def change_log(
with open(csv, "w") as csv_file:
log_items = list(logs)
field_names = log_items[0].keys()
writer = lib_csv.DictWriter( # type: ignore
writer = lib_csv.DictWriter(
csv_file,
delimiter=",",
quotechar='"',
quoting=lib_csv.QUOTE_ALL,
fieldnames=field_names, # type: ignore
fieldnames=field_names,
)
writer.writeheader()
for log in logs:

View File

@@ -1,73 +0,0 @@
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# Release Notes for Superset 1.3
Superset 1.3 focuses on hardening and polishing the superset user experience, with tons of UX improvements and bug fixes focused on charts, dashboards, and the new dashboard-native filters.
- [**User Experience**](#user-experience)
- [**PR Highlights**](#pr-highlights)
- [**Breaking Changes and Full Changelog**](#breaking-changes-and-full-changelog)
# User Experience
One major goal of this release is to improve and harden dashboard-native filters. These filters live at the dashboard level instead of within a chart and affect all charts under their scope within a dashboard. Improvements in this release include clearer visual indicators of what charts are within the scope of a selected filter.
![dashboard native filter scoping](media/dashboard_native_filters_1.jpg)
Native-filters can also be set to load collapsed, which also improves connected thumbnail and alerts/reports functionality.
![dashboard native filter collapsed](media/native_filters_collapsed.png)
For charts, we've added a new funnel chart.
![funnel chart](media/funnel_chart.png)
Users can also now use Jinja templating in calculated columns and SQL metrics.
![jinja templating](media/jinja_templating.png)
At the dashboard level, work has been focused on improving available information and UX ergonomics. Users can now download a full .csv of the full dataset behind a table chart from the dashboard.
![export full csv](media/export_full_csv.png)
Continuing on the theme of making more things accessible directly from the dashboard, users can now view the SQL Query behind any chart directly from the dashboard as well.
![view query dashboard](media/view_query_dashboard.png)
# Developer Experience
The API has received a new endpoint to allow the developer to pass DB-specific parameters instead of the full SQLAlchemy URI.
# Database Connectivity
We have improved support for Ascend.io's engine spec and fixed a long list of bugs.
Also in the works is a new database connection UI, which should make connecting to a database easier without having to put together a SQLAlchemy URI. It's behind a feature flag for now, but it can be turned on in config.py with `FORCE_DATABASE_CONNECTIONS_SSL = True`.
# PR Highlights
- [14682](https://github.com/apache/superset/pull/14682) add ascend engine spec (#14682) (@Daniel Wood)
- [14420](https://github.com/apache/superset/pull/14420) feat: API endpoint to validate databases using separate parameters (#14420) (@Beto Dealmeida)
- [14934](https://github.com/apache/superset/pull/14934) feat: Adding FORCE_SSL as feature flag in config.py (#14934) (@AAfghahi)
- [14480](https://github.com/apache/superset/pull/14480) feat(viz): add funnel chart (#14480) (@Ville Brofeldt)
## Breaking Changes and Full Changelog
- To see the complete changelog in this release, head to [CHANGELOG.MD](../../CHANGELOG.md).
- 1.3.0 does not contain any backwards incompatible changes.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

View File

@@ -61,7 +61,6 @@ Join our growing community!
- [Tails.com](https://tails.com) [@alanmcruickshank]
- [THE ICONIC](http://theiconic.com.au/) [@ksaagariconic]
- [Utair](https://www.utair.ru) [@utair-digital]
- [VkusVill](https://www.vkusvill.ru) [@ETselikov]
- [Zalando](https://www.zalando.com) [@dmigo]
- [Zalora](https://www.zalora.com) [@ksaagariconic]
@@ -97,7 +96,6 @@ Join our growing community!
- [Showmax](https://tech.showmax.com) [@bobek]
- [source{d}](https://www.sourced.tech) [@marnovo]
- [Steamroot](https://streamroot.io/)
- [TechAudit](https://www.techaudit.info) [@ETselikov]
- [Tenable](https://www.tenable.com) [@dflionis]
- [timbr.ai](https://timbr.ai/) [@semantiDan]
- [Tobii](http://www.tobii.com/) [@dwa]
@@ -106,6 +104,7 @@ Join our growing community!
- [Windsor.ai](https://www.windsor.ai/) [@octaviancorlade]
- [Zeta](https://www.zeta.tech/) [@shaikidris]
### Entertainment
- [6play](https://www.6play.fr) [@CoryChaplin]
- [bilibili](https://www.bilibili.com) [@Moinheart]
@@ -130,7 +129,6 @@ Join our growing community!
### Healthcare
- [Amino](https://amino.com) [@shkr]
- [Care](https://www.getcare.io/)[@alandao2021]
- [Living Goods](https://www.livinggoods.org) [@chelule]
- [Maieutical Labs](https://maieuticallabs.it) [@xrmx]
- [QPID Health](http://www.qpidhealth.com/)

View File

@@ -22,55 +22,27 @@ under the License.
This file documents any backwards-incompatible changes in Superset and
assists people when migrating to a new version.
## 1.4.1
### Breaking Changes
- [17984](https://github.com/apache/superset/pull/17984): Default Flask SECRET_KEY has changed for security reasons. You should always override with your own secret. Set `PREVIOUS_SECRET_KEY` (ex: PREVIOUS_SECRET_KEY = "\2\1thisismyscretkey\1\2\\e\\y\\y\\h") with your previous key and use `superset re-encrypt-secrets` to rotate you current secrets
### Potential Downtime
### Deprecations
### Other
## 1.4.0
### Breaking Changes
- [16660](https://github.com/apache/superset/pull/16660): The `columns` Jinja parameter has been renamed `table_columns` to make the `columns` query object parameter available in the Jinja context.
- [16711](https://github.com/apache/superset/pull/16711): The `url_param` Jinja function will now by default escape the result. For instance, the value `O'Brien` will now be changed to `O''Brien`. To disable this behavior, call `url_param` with `escape_result` set to `False`: `url_param("my_key", "my default", escape_result=False)`.
### Potential Downtime
### Deprecations
### Other
- [16809](https://github.com/apache/superset/pull/16809): When building the superset frontend assets manually, you should now use Node 16 (previously Node 14 was required/recommended). Node 14 will most likely still work for at least some time, but is no longer actively tested for on CI.
## 1.3.0
### Breaking Changes
- [15909](https://github.com/apache/superset/pull/15909): a change which
drops a uniqueness criterion (which may or may not have existed) to the tables table. This constraint was obsolete as it is handled by the ORM due to differences in how MySQL, PostgreSQL, etc. handle uniqueness for NULL values.
- [15909](https://github.com/apache/incubator-superset/pull/15909): a change which
drops a uniqueness criterion (which may or may not have existed) to the tables table. This constraint was obsolete as it is handled by the ORM due to differences in how MySQL, PostgreSQL, etc. handle uniqueness for NULL values.
### Potential Downtime
- [14234](https://github.com/apache/superset/pull/14234): Adds the `limiting_factor` column to the `query` table. Give the migration includes a DDL operation on a heavily trafficed table, potential service downtime may be required.
-[16454](https://github.com/apache/superset/pull/16454): Adds the `extra` column to the `table_columns` table. Users using MySQL will either need to schedule downtime or use the percona toolkit (or similar) to perform the migration.
## 1.2.0
### Deprecations
- [13440](https://github.com/apache/superset/pull/13440): Dashboard/Charts reports and old Alerts is deprecated. The following config keys are deprecated:
- ENABLE_ALERTS
- SCHEDULED_EMAIL_DEBUG_MODE
- EMAIL_REPORTS_CRON_RESOLUTION
- EMAIL_ASYNC_TIME_LIMIT_SEC
- EMAIL_REPORT_BCC_ADDRESS
- EMAIL_REPORTS_USER
- ENABLE_ALERTS
- SCHEDULED_EMAIL_DEBUG_MODE
- EMAIL_REPORTS_CRON_RESOLUTION
- EMAIL_ASYNC_TIME_LIMIT_SEC
- EMAIL_REPORT_BCC_ADDRESS
- EMAIL_REPORTS_USER
### Other
@@ -105,21 +77,19 @@ assists people when migrating to a new version.
## 1.0.0
### Breaking Changes
- [11509](https://github.com/apache/superset/pull/12491): Dataset metadata updates check user ownership, only owners or an Admin are allowed.
- Security simplification (SIP-19), the following permission domains were simplified:
- [12072](https://github.com/apache/superset/pull/12072): `Query` with `can_read`, `can_write`
- [12036](https://github.com/apache/superset/pull/12036): `Database` with `can_read`, `can_write`.
- [12012](https://github.com/apache/superset/pull/12036): `Dashboard` with `can_read`, `can_write`.
- [12061](https://github.com/apache/superset/pull/12061): `Log` with `can_read`, `can_write`.
- [12000](https://github.com/apache/superset/pull/12000): `Dataset` with `can_read`, `can_write`.
- [12014](https://github.com/apache/superset/pull/12014): `Annotation` with `can_read`, `can_write`.
- [11981](https://github.com/apache/superset/pull/11981): `Chart` with `can_read`, `can_write`.
- [11853](https://github.com/apache/superset/pull/11853): `ReportSchedule` with `can_read`, `can_write`.
- [11856](https://github.com/apache/superset/pull/11856): `CssTemplate` with `can_read`, `can_write`.
- [11764](https://github.com/apache/superset/pull/11764): `SavedQuery` with `can_read`, `can_write`.
Old permissions will be automatically migrated to these new permissions and applied to all existing security Roles.
- [12072](https://github.com/apache/superset/pull/12072): `Query` with `can_read`, `can_write`
- [12036](https://github.com/apache/superset/pull/12036): `Database` with `can_read`, `can_write`.
- [12012](https://github.com/apache/superset/pull/12036): `Dashboard` with `can_read`, `can_write`.
- [12061](https://github.com/apache/superset/pull/12061): `Log` with `can_read`, `can_write`.
- [12000](https://github.com/apache/superset/pull/12000): `Dataset` with `can_read`, `can_write`.
- [12014](https://github.com/apache/superset/pull/12014): `Annotation` with `can_read`, `can_write`.
- [11981](https://github.com/apache/superset/pull/11981): `Chart` with `can_read`, `can_write`.
- [11853](https://github.com/apache/superset/pull/11853): `ReportSchedule` with `can_read`, `can_write`.
- [11856](https://github.com/apache/superset/pull/11856): `CssTemplate` with `can_read`, `can_write`.
- [11764](https://github.com/apache/superset/pull/11764): `SavedQuery` with `can_read`, `can_write`.
Old permissions will be automatically migrated to these new permissions and applied to all existing security Roles.
- [11499](https://github.com/apache/superset/pull/11499): Breaking change: `STORE_CACHE_KEYS_IN_METADATA_DB` config flag added (default=`False`) to write `CacheKey` records to the metadata DB. `CacheKey` recording was enabled by default previously.
@@ -134,44 +104,42 @@ assists people when migrating to a new version.
- [11244](https://github.com/apache/superset/pull/11244): The `REDUCE_DASHBOARD_BOOTSTRAP_PAYLOAD` feature flag has been removed after being set to True for multiple months.
- [11172](https://github.com/apache/superset/pull/11172): Turning
off language selectors by default as i18n is incomplete in most languages
and requires more work. You can easily turn on the languages you want
to expose in your environment in superset_config.py
off language selectors by default as i18n is incomplete in most languages
and requires more work. You can easily turn on the languages you want
to expose in your environment in superset_config.py
- [11172](https://github.com/apache/superset/pull/11172): Breaking change: SQL templating is turned off by default. To turn it on set `ENABLE_TEMPLATE_PROCESSING` to True on `FEATURE_FLAGS`
### Potential Downtime
- [11920](https://github.com/apache/superset/pull/11920): Undos the DB migration from [11714](https://github.com/apache/superset/pull/11714) to prevent adding new columns to the logs table. Deploying a sha between these two PRs may result in locking your DB.
- [11714](https://github.com/apache/superset/pull/11714): Logs
significantly more analytics events (roughly double?), and when
using DBEventLogger (default) could result in stressing the metadata
database more.
significantly more analytics events (roughly double?), and when
using DBEventLogger (default) could result in stressing the metadata
database more.
- [11098](https://github.com/apache/superset/pull/11098): includes a database migration that adds a `uuid` column to most models, and updates `Dashboard.position_json` to include chart UUIDs. Depending on number of objects, the migration may take up to 5 minutes, requiring planning for downtime.
### Deprecations
- [11155](https://github.com/apache/superset/pull/11155): The `FAB_UPDATE_PERMS` config parameter is no longer required as the Superset application correctly informs FAB under which context permissions should be updated.
## 0.38.0
- [10887](https://github.com/apache/superset/pull/10887): Breaking change: The custom cache backend changed in order to support the Flask-Caching factory method approach and thus must be registered as a custom type. See [here](https://flask-caching.readthedocs.io/en/latest/#custom-cache-backends) for specifics.
* [10887](https://github.com/apache/superset/pull/10887): Breaking change: The custom cache backend changed in order to support the Flask-Caching factory method approach and thus must be registered as a custom type. See [here](https://flask-caching.readthedocs.io/en/latest/#custom-cache-backends) for specifics.
- [10674](https://github.com/apache/superset/pull/10674): Breaking change: PUBLIC_ROLE_LIKE_GAMMA was removed is favour of the new PUBLIC_ROLE_LIKE so it can be set to whatever role you want.
* [10674](https://github.com/apache/superset/pull/10674): Breaking change: PUBLIC_ROLE_LIKE_GAMMA was removed is favour of the new PUBLIC_ROLE_LIKE so it can be set to whatever role you want.
- [10590](https://github.com/apache/superset/pull/10590): Breaking change: this PR will convert iframe chart into dashboard markdown component, and remove all `iframe`, `separator`, and `markup` slices (and support) from Superset. If you have important data in those slices, please backup manually.
* [10590](https://github.com/apache/superset/pull/10590): Breaking change: this PR will convert iframe chart into dashboard markdown component, and remove all `iframe`, `separator`, and `markup` slices (and support) from Superset. If you have important data in those slices, please backup manually.
- [10562](https://github.com/apache/superset/pull/10562): EMAIL_REPORTS_WEBDRIVER is deprecated use WEBDRIVER_TYPE instead.
* [10562](https://github.com/apache/superset/pull/10562): EMAIL_REPORTS_WEBDRIVER is deprecated use WEBDRIVER_TYPE instead.
- [10567](https://github.com/apache/superset/pull/10567): Default WEBDRIVER_OPTION_ARGS are Chrome-specific. If you're using FF, should be `--headless` only
* [10567](https://github.com/apache/superset/pull/10567): Default WEBDRIVER_OPTION_ARGS are Chrome-specific. If you're using FF, should be `--headless` only
- [10241](https://github.com/apache/superset/pull/10241): change on Alpha role, users started to have access to "Annotation Layers", "Css Templates" and "Import Dashboards".
* [10241](https://github.com/apache/superset/pull/10241): change on Alpha role, users started to have access to "Annotation Layers", "Css Templates" and "Import Dashboards".
- [10324](https://github.com/apache/superset/pull/10324): Facebook Prophet has been introduced as an optional dependency to add support for timeseries forecasting in the chart data API. To enable this feature, install Superset with the optional dependency `prophet` or directly `pip install fbprophet`.
* [10324](https://github.com/apache/superset/pull/10324): Facebook Prophet has been introduced as an optional dependency to add support for timeseries forecasting in the chart data API. To enable this feature, install Superset with the optional dependency `prophet` or directly `pip install fbprophet`.
- [10320](https://github.com/apache/superset/pull/10320): References to blacklst/whitelist language have been replaced with more appropriate alternatives. All configs refencing containing `WHITE`/`BLACK` have been replaced with `ALLOW`/`DENY`. Affected config variables that need to be updated: `TIME_GRAIN_BLACKLIST`, `VIZ_TYPE_BLACKLIST`, `DRUID_DATA_SOURCE_BLACKLIST`.
* [10320](https://github.com/apache/superset/pull/10320): References to blacklst/whitelist language have been replaced with more appropriate alternatives. All configs refencing containing `WHITE`/`BLACK` have been replaced with `ALLOW`/`DENY`. Affected config variables that need to be updated: `TIME_GRAIN_BLACKLIST`, `VIZ_TYPE_BLACKLIST`, `DRUID_DATA_SOURCE_BLACKLIST`.
## 0.37.1

View File

@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
x-superset-image: &superset-image apache/superset:latest-dev
x-superset-depends-on: &superset-depends-on
- db
- redis
@@ -33,7 +33,7 @@ services:
- redis:/data
db:
env_file: docker/.env-non-dev
env_file: docker/.env
image: postgres:10
container_name: superset_db
restart: unless-stopped

View File

@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
x-superset-image: &superset-image apache/superset:latest-dev
x-superset-user: &superset-user root
x-superset-depends-on: &superset-depends-on
- db
@@ -102,7 +102,7 @@ services:
CYPRESS_CONFIG: "${CYPRESS_CONFIG}"
superset-node:
image: node:16
image: node:14
container_name: superset_node
command: ["/app/docker/docker-frontend.sh"]
env_file: docker/.env

View File

@@ -1465,7 +1465,7 @@ install from pip: ::
and run via: ::
celery --app=superset.tasks.celery_app:app flower
celery flower --app=superset.tasks.celery_app:app
Building from source
---------------------

View File

@@ -26,7 +26,7 @@ import { pmc } from '../resources/data';
const links = [
[
'https://join.slack.com/t/apache-superset/shared_invite/zt-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw',
'https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ',
'Slack',
'interact with other Superset users and community members',
],

View File

@@ -1,68 +0,0 @@
---
name: Databricks
menu: Connecting to Databases
route: /docs/databases/databricks
index: 30
version: 1
---
## Databricks
To connect to Databricks, first install [databricks-dbapi](https://pypi.org/project/databricks-dbapi/) with the optional SQLAlchemy dependencies:
```bash
pip install databricks-dbapi[sqlalchemy]
```
There are two ways to connect to Databricks: using a Hive connector or an ODBC connector. Both ways work similarly, but only ODBC can be used to connect to [SQL endpoints](https://docs.databricks.com/sql/admin/sql-endpoints.html).
### Hive
To use the Hive connector you need the following information from your cluster:
- Server hostname
- Port
- HTTP path
These can be found under "Configuration" -> "Advanced Options" -> "JDBC/ODBC".
You also need an access token from "Settings" -> "User Settings" -> "Access Tokens".
Once you have all this information, add a database of type "Databricks (Hive)" in Superset, and use the following SQLAlchemy URI:
```
databricks+pyhive://token:{access token}@{server hostname}:{port}/{database name}
```
You also need to add the following configuration to "Other" -> "Engine Parameters", with your HTTP path:
```
{"connect_args": {"http_path": "sql/protocolv1/o/****"}}
```
### ODBC
For ODBC you first need to install the [ODBC drivers for your platform](https://databricks.com/spark/odbc-drivers-download).
For a regular connection use this as the SQLAlchemy URI:
```
databricks+pyodbc://token:{access token}@{server hostname}:{port}/{database name}
```
And for the connection arguments:
```
{"connect_args": {"http_path": "sql/protocolv1/o/****", "driver_path": "/path/to/odbc/driver"}}
```
The driver path should be:
- `/Library/simba/spark/lib/libsparkodbc_sbu.dylib` (Mac OS)
- `/opt/simba/spark/lib/64/libsparkodbc_sb64.so` (Linux)
For a connection to a SQL endpoint you need to use the HTTP path from the endpoint:
```
{"connect_args": {"http_path": "/sql/1.0/endpoints/****", "driver_path": "/path/to/odbc/driver"}}
```

View File

@@ -1,24 +0,0 @@
---
name: Firebolt
menu: Connecting to Databases
route: /docs/databases/firebolt
index: 31
version: 1
---
## Firebolt
The recommended connector library for Firebolt is [firebolt-sqlalchemy](https://pypi.org/project/firebolt-sqlalchemy/).
Superset has been tested on `firebolt-sqlalchemy>=0.0.1`.
The recommended connection string is:
```
firebolt://{username}:{password}@{host}/{database}
```
Here's a connection string example of Superset connecting to a Firebolt database:
```
firebolt://email@domain:password@host/sample_database
```

View File

@@ -42,13 +42,12 @@ A list of some of the recommended packages.
|[Elasticsearch](/docs/databases/elasticsearch)|```pip install elasticsearch-dbapi```|```elasticsearch+http://{user}:{password}@{host}:9200/```|
|[Exasol](/docs/databases/exasol)|```pip install sqlalchemy-exasol```|```exa+pyodbc://{username}:{password}@{hostname}:{port}/my_schema?CONNECTIONLCALL=en_US.UTF-8&driver=EXAODBC```|
|[Google Sheets](/docs/databases/google-sheets)|```pip install shillelagh[gsheetsapi]```|```gsheets://```|
|[Firebolt](/docs/databases/firebolt)|```pip install firebolt-sqlalchemy```|```firebolt://{username}:{password}@{host}/{database}```|
|[Hologres](/docs/databases/hologres)|```pip install psycopg2```|```postgresql+psycopg2://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|[IBM Db2](/docs/databases/ibm-db2)|```pip install ibm_db_sa```|```db2+ibm_db://```|
|[IBM Netezza Performance Server](/docs/databases/netezza)|```pip install nzalchemy```|```netezza+nzpy://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|[MySQL](/docs/databases/mysql)|```pip install mysqlclient```|```mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|[Oracle](/docs/databases/oracle)|```pip install cx_Oracle```|```oracle://```|
|[PostgreSQL](/docs/databases/postgres)|```pip install psycopg2```|```postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|[PostgreSQL](/docs/databases/postgresql)|```pip install psycopg2```|```postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|[Trino](/docs/databases/trino)|```pip install sqlalchemy-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}```|
@@ -70,5 +69,5 @@ exists, please file an issue on the
supporting it.
[StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset+superset) and the
[Superset community Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw)
[Superset community Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
are great places to get help with connecting to databases in Superset.

View File

@@ -8,8 +8,8 @@ version: 1
## Postgres
Note that, if you're using docker-compose, the Postgres connector library [psycopg2](https://www.psycopg.org/docs/)
comes out of the box with Superset.
Note that the Postgres connector library [psycopg2](https://www.psycopg.org/docs/) comes out of the
box with Superset.
Postgres sample connection parameters:

View File

@@ -9,7 +9,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:

View File

@@ -66,7 +66,7 @@ Navigate to **Data ‣ Datasets** and select the **+ Dataset** button in the top
A modal window should pop up in front of you. Select your **Database**,
**Schema**, and **Table** using the drop downs that appear. In the following example,
we register the **cleaned_sales_data** table from the **examples** database.
we register the **Vehicle Sales** table from the **examples** database.
<img src="/images/tutorial_09_add_new_table.png" />

View File

@@ -11,7 +11,7 @@ The core contributors (or committers) to Superset communicate primarily in the f
which you can join):
- [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-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw)
- [Apache Superset Slack community](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
- [Github issues and PR's](https://github.com/apache/superset/issues)
If you're interested in contributing, we recommend reading the Community Contribution Guide

View File

@@ -183,10 +183,10 @@ You can read more about customizing Superset using the configuration file
Table schemas evolve, and Superset needs to reflect that. Its pretty common in the life cycle of a
dashboard to want to add a new dimension or metric. To get Superset to discover your new columns,
all you have to do is to go to **Data -> Datasets**, click the edit icon next to the dataset
whose schema has changed, and hit **Sync columns from source** from the **Columns** tab.
Behind the scene, the new columns will get merged it. Following this, you may want to re-edit the
table afterwards to configure the Columns tab, check the appropriate boxes and save again.
all you have to do is to go to **Menu -> Sources -> Tables**, click the edit icon next to the table
whos schema has changed, and hit **Save** from the **Detail** tab. Behind the scene, the new
columns will get merged it. Following this, you may want to re-edit the table afterwards to
configure the Column tab, check the appropriate boxes and save again.
### What database engine can I use as a backend for Superset?
@@ -212,6 +212,12 @@ You can take a look at this Flask-AppBuilder
Simply apply the filter and save the dashboard while the filter is active.
### How do I get Superset to refresh the schema of my table?
When adding columns to a table, you can have Superset detect and merge the new columns in by using
the “Refresh Metadata” action in the **Source -> Tables** page. Simply check the box next to the
tables you want the schema refreshed, and click **Actions -> Refresh Metadata**.
### Is there a way to force the use specific colors?
It is possible on a per-dashboard basis by providing a mapping of labels to colors in the JSON

View File

@@ -114,5 +114,5 @@ pip install flower
You can run flower using:
```
celery --app=superset.tasks.celery_app:app flower
celery flower --app=superset.tasks.celery_app:app
```

View File

@@ -21,7 +21,7 @@ SUPERSET_WEBSERVER_PORT = 8088
# Flask App Builder configuration
# Your App secret key
SECRET_KEY = 'USE_YOUR_OWN_SECURE_RANDOM_KEY'
SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h'
# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
@@ -56,8 +56,7 @@ for more information on how to configure it.
Make sure to change:
- `SQLALCHEMY_DATABASE_URI`: by default it is stored at ~/.superset/superset.db
- `SECRET_KEY`: Use a strong complex alphanumeric string and use a tool
to help you generate a sufficiently random sequence, ex: openssl rand -base64 42"
- `SECRET_KEY`: to a long random string
If you need to exempt endpoints from CSRF (e.g. if you are running a custom auth postback endpoint),
you can add the endpoints to `WTF_CSRF_EXEMPT_LIST`:
@@ -202,29 +201,6 @@ CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager
]
```
### Flask app Configuration Hook
`FLASK_APP_MUTATOR` is a configuration function that can be provided in your environment, receives
the app object and can alter it in any way. For example, add `FLASK_APP_MUTATOR` into your
`superset_config.py` to setup session cookie expiration time to 24 hours:
```python
from flask import session
from flask import Flask
def make_session_permanent():
'''
Enable maxAge for the cookie 'session'
'''
session.permanent = True
# Set up max age of session to 24 hours
PERMANENT_SESSION_LIFETIME = timedelta(hours=24)
def FLASK_APP_MUTATOR(app: Flask) -> None:
app.before_request_funcs.setdefault(None, []).append(make_session_permanent)
```
### Feature Flags
To support a diverse set of users, Superset has some features that are not enabled by default. For
@@ -242,7 +218,7 @@ FEATURE_FLAGS = {
}
```
A current list of feature flags can be found in [RESOURCES/FEATURE_FLAGS.md](https://github.com/apache/superset/blob/master/RESOURCES/FEATURE_FLAGS.md).
A current list of feature flags can be found in `RESOURCES/FEATURE_FLAGS.md`
### SIP 15

View File

@@ -60,23 +60,12 @@ Navigate to the folder you created in step 1:
$ cd superset
```
Then, run the following commands:
Then, run the following command:
```bash
$ docker-compose -f docker-compose-non-dev.yml pull
$ docker-compose -f docker-compose-non-dev.yml up
```
Alternatively, you can also run a specific version of Superset by first checking out
the branch/tag, and then starting `docker-compose` with the `TAG` variable.
For example, to run the 1.4.2 version, run the following commands:
```bash
% git checkout 1.4.2
$ TAG=1.4.0 docker-compose -f docker-compose-non-dev.yml pull
$ TAG=1.4.0 docker-compose -f docker-compose-non-dev.yml up
```
You should see a wall of logging output from the containers being launched on your machine. Once
this output slows, you should have a running instance of Superset on your local machine!

View File

@@ -36,18 +36,6 @@ Install the following packages using the `yum` package manager:
sudo yum install gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel
```
In more recent versions of CentOS and Fedora, you may need to install a slightly different set of packages using `dnf`:
```
sudo dnf install gcc gcc-c++ libffi-devel python3-devel python3-pip python3-wheel openssl-devel cyrus-sasl-devel openldap-devel
```
Also, on CentOS, you may need to upgrade pip for the install to work:
```
pip3 install --upgrade pip
```
**Mac OS X**
If you're not on the latest version of OS X, we recommend upgrading because we've found that many
@@ -65,7 +53,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 (Superset uses 3.7.9). 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`:

View File

@@ -10,34 +10,10 @@ 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
`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:
- `columns`: columns which to group by in the query
- `filter`: filters applied in the query
- `from_dttm`: start `datetime` value from the selected time range (`None` if undefined)
- `to_dttm`: end `datetime` value from the selected time range (`None` if undefined)
- `groupby`: columns which to group by in the query (deprecated)
- `metrics`: aggregate expressions in the query
- `row_limit`: row limit of the query
- `row_offset`: row offset of the query
- `table_columns`: columns available in the dataset
- `time_column`: temporal column of the query (`None` if undefined)
- `time_grain`: selected time grain (`None` if undefined)
For example, to add a time range to a virtual dataset, you can write the following:
```sql
SELECT * from tbl where dttm_col > '{{ from_dttm }}' and dttm_col < '{{ to_dttm }}'
```
To add custom functionality to the Jinja context, you need to to to overload the default Jinja
context in your environment by defining the `JINJA_CONTEXT_ADDONS` in your superset configuration
(`superset_config.py`). Objects referenced in this dictionary are made available for users to use
where the Jinja context is made available.
SQL Lab supports [Jinja templating](https://jinja.palletsprojects.com/en/2.11.x/) in queries. You'll
need to to overload the default Jinja context in your environment by defining the
JINJA_CONTEXT_ADDONS in your superset configuration (`superset_config.py`). Objects referenced in
this dictionary are made available for users to use in their SQL code.
```python
JINJA_CONTEXT_ADDONS = {
@@ -198,7 +174,7 @@ You can retrieve the value for a specific filter as a list using `{{ filter_valu
This is useful if:
- you want to use a filter component to filter a query where the name of filter component column doesn't match the one in the select statement
- you want to have the ability for filter inside the main query for performance purposes
- you want to have the ability for filter inside the main query for speed purposes
Here's a concrete example:
@@ -210,6 +186,11 @@ WHERE
GROUP BY action
```
You can use thisfeature to reference the start & end datetimes from a time filter using:
- `{{ from_dttm }}`: start datetime value
- `{{ to_dttm }}`: end datetime value
**Filters for a Specific Column**
The `{{ get_filters() }}` macro returns the filters applied to a given column. In addition to

View File

@@ -7,7 +7,7 @@ route: /docs/security
### Roles
Security in Superset is handled by Flask AppBuilder (FAB), an application development framework
built on top of Flask. FAB provides authentication, user management, permissions and roles.
built on top of Flask.”. FAB provides authentication, user management, permissions and roles.
Please read its [Security documentation](https://flask-appbuilder.readthedocs.io/en/latest/security.html).
### Provided Roles
@@ -15,7 +15,7 @@ Please read its [Security documentation](https://flask-appbuilder.readthedocs.io
Superset ships with a set of roles that are handled by Superset itself. You can assume
that these roles will stay up-to-date as Superset evolves (and as you update Superset versions).
Even though **Admin** users have the ability, we don't recommend altering the
Even though **Admin** users have the ability, we don't recommend that altering the
permissions associated with each role (e.g. by removing or adding permissions to them). The permissions
associated with each role will be re-synchronized to their original values when you run
the **superset init** command (often done between Superset versions).

View File

@@ -730,13 +730,13 @@
"PT5M",
"PT10M",
"PT15M",
"PT30M",
"PT0.5H",
"PT1H",
"PT6H",
"P1D",
"P1W",
"P1M",
"P3M",
"P0.25Y",
"P1Y",
"1969-12-28T00:00:00Z/P1W",
"1969-12-29T00:00:00Z/P1W",
@@ -998,13 +998,13 @@
"PT5M",
"PT10M",
"PT15M",
"PT30M",
"PT0.5H",
"PT1H",
"PT6H",
"P1D",
"P1W",
"P1M",
"P3M",
"P0.25Y",
"P1Y",
"1969-12-28T00:00:00Z/P1W",
"1969-12-29T00:00:00Z/P1W",
@@ -2722,7 +2722,7 @@
"type": "string"
},
"impersonate_user": {
"description": "If Presto, Trino or Drill all the queries in SQL Lab are going to be executed as the currently logged on user who must have permission to run them.<br/>If Hive and hive.server2.enable.doAs is enabled, will run the queries as service account, but impersonate the currently logged on user via hive.server2.proxy.user property.",
"description": "If Presto, all the queries in SQL Lab are going to be executed as the currently logged on user who must have permission to run them.<br/>If Hive and hive.server2.enable.doAs is enabled, will run the queries as service account, but impersonate the currently logged on user via hive.server2.proxy.user property.",
"type": "boolean"
},
"parameters": {
@@ -2816,7 +2816,7 @@
"type": "string"
},
"impersonate_user": {
"description": "If Presto, Trino or Drill all the queries in SQL Lab are going to be executed as the currently logged on user who must have permission to run them.<br/>If Hive and hive.server2.enable.doAs is enabled, will run the queries as service account, but impersonate the currently logged on user via hive.server2.proxy.user property.",
"description": "If Presto, all the queries in SQL Lab are going to be executed as the currently logged on user who must have permission to run them.<br/>If Hive and hive.server2.enable.doAs is enabled, will run the queries as service account, but impersonate the currently logged on user via hive.server2.proxy.user property.",
"type": "boolean"
},
"parameters": {
@@ -2866,7 +2866,7 @@
"type": "string"
},
"impersonate_user": {
"description": "If Presto, Trino or Drill all the queries in SQL Lab are going to be executed as the currently logged on user who must have permission to run them.<br/>If Hive and hive.server2.enable.doAs is enabled, will run the queries as service account, but impersonate the currently logged on user via hive.server2.proxy.user property.",
"description": "If Presto, all the queries in SQL Lab are going to be executed as the currently logged on user who must have permission to run them.<br/>If Hive and hive.server2.enable.doAs is enabled, will run the queries as service account, but impersonate the currently logged on user via hive.server2.proxy.user property.",
"type": "boolean"
},
"parameters": {
@@ -2914,7 +2914,7 @@
"type": "string"
},
"impersonate_user": {
"description": "If Presto, Trino or Drill all the queries in SQL Lab are going to be executed as the currently logged on user who must have permission to run them.<br/>If Hive and hive.server2.enable.doAs is enabled, will run the queries as service account, but impersonate the currently logged on user via hive.server2.proxy.user property.",
"description": "If Presto, all the queries in SQL Lab are going to be executed as the currently logged on user who must have permission to run them.<br/>If Hive and hive.server2.enable.doAs is enabled, will run the queries as service account, but impersonate the currently logged on user via hive.server2.proxy.user property.",
"type": "boolean"
},
"parameters": {
@@ -9984,45 +9984,43 @@
"content": {
"application/json": {
"schema": {
"databases": {
"items": {
"properties": {
"available_drivers": {
"description": "Installed drivers for the engine",
"items": {
"type": "string"
},
"type": "array"
},
"default_driver": {
"description": "Default driver for the engine",
"items": {
"properties": {
"available_drivers": {
"description": "Installed drivers for the engine",
"items": {
"type": "string"
},
"engine": {
"description": "Name of the SQLAlchemy engine",
"type": "string"
},
"name": {
"description": "Name of the database",
"type": "string"
},
"parameters": {
"description": "JSON schema defining the needed parameters",
"type": "object"
},
"preferred": {
"description": "Is the database preferred?",
"type": "boolean"
},
"sqlalchemy_uri_placeholder": {
"description": "Example placeholder for the SQLAlchemy URI",
"type": "string"
}
"type": "array"
},
"type": "object"
"default_driver": {
"description": "Default driver for the engine",
"type": "string"
},
"engine": {
"description": "Name of the SQLAlchemy engine",
"type": "string"
},
"name": {
"description": "Name of the database",
"type": "string"
},
"parameters": {
"description": "JSON schema defining the needed parameters",
"type": "object"
},
"preferred": {
"description": "Is the database preferred?",
"type": "boolean"
},
"sqlalchemy_uri_placeholder": {
"description": "Example placeholder for the SQLAlchemy URI",
"type": "string"
}
},
"type": "array"
}
"type": "object"
},
"type": "array"
}
}
},

View File

@@ -22,7 +22,7 @@ maintainers:
- name: craig-rueda
email: craig@craigrueda.com
url: https://github.com/craig-rueda
version: 0.3.10
version: 0.3.5
dependencies:
- name: postgresql
version: 10.2.0

View File

@@ -61,9 +61,6 @@ spec:
initContainers:
{{- tpl (toYaml .Values.supersetCeleryBeat.initContainers) . | nindent 6 }}
{{- end }}
{{- with .Values.hostAliases }}
hostAliases: {{ toYaml . | nindent 6 }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
@@ -72,13 +69,12 @@ spec:
env:
- name: "SUPERSET_PORT"
value: {{ .Values.service.port | quote}}
{{- if .Values.extraEnv }}
{{- range $key, $value := .Values.extraEnv }}
- name: {{ $key | quote}}
value: {{ $value | quote }}
{{- end }}
{{- if .Values.extraEnvRaw }}
{{- toYaml .Values.extraEnvRaw | nindent 12 }}
{{- end }}
{{- end }}
envFrom:
- secretRef:
name: {{ tpl .Values.envFromSecret . | quote }}
@@ -90,9 +86,6 @@ spec:
- name: superset-config
mountPath: {{ .Values.configMountPath | quote }}
readOnly: true
{{- with .Values.extraVolumeMounts }}
{{- tpl (toYaml .) $ | nindent 12 -}}
{{- end }}
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- with .Values.nodeSelector }}
@@ -115,7 +108,4 @@ spec:
- name: superset-config
secret:
secretName: {{ tpl .Values.configFromSecret . }}
{{- with .Values.extraVolumes }}
{{- tpl (toYaml .) $ | nindent 8 -}}
{{- end }}
{{- end -}}

View File

@@ -62,9 +62,6 @@ spec:
initContainers:
{{- tpl (toYaml .Values.supersetWorker.initContainers) . | nindent 6 }}
{{- end }}
{{- with .Values.hostAliases }}
hostAliases: {{ toYaml . | nindent 6 }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
@@ -73,13 +70,12 @@ spec:
env:
- name: "SUPERSET_PORT"
value: {{ .Values.service.port | quote}}
{{- if .Values.extraEnv }}
{{- range $key, $value := .Values.extraEnv }}
- name: {{ $key | quote}}
value: {{ $value | quote }}
{{- end }}
{{- if .Values.extraEnvRaw }}
{{- toYaml .Values.extraEnvRaw | nindent 12 }}
{{- end }}
{{- end }}
envFrom:
- secretRef:
name: {{ tpl .Values.envFromSecret . | quote }}
@@ -91,9 +87,6 @@ spec:
- name: superset-config
mountPath: {{ .Values.configMountPath | quote }}
readOnly: true
{{- with .Values.extraVolumeMounts }}
{{- tpl (toYaml .) $ | nindent 12 -}}
{{- end }}
resources:
{{ toYaml .Values.resources | indent 12 }}
{{- with .Values.nodeSelector }}
@@ -116,6 +109,3 @@ spec:
- name: superset-config
secret:
secretName: {{ tpl .Values.configFromSecret . }}
{{- with .Values.extraVolumes }}
{{- tpl (toYaml .) $ | nindent 8 -}}
{{- end }}

View File

@@ -65,9 +65,6 @@ spec:
initContainers:
{{- tpl (toYaml .Values.supersetNode.initContainers) . | nindent 6 }}
{{- end }}
{{- with .Values.hostAliases }}
hostAliases: {{ toYaml . | nindent 6 }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
@@ -76,17 +73,12 @@ spec:
env:
- name: "SUPERSET_PORT"
value: {{ .Values.service.port | quote}}
{{- if .Values.extraEnv }}
{{- range $key, $value := .Values.extraEnv }}
- name: {{ $key | quote}}
value: {{ $value | quote }}
{{- end }}
{{- range $key, $value := .Values.supersetNode.env }}
- name: {{ $key | quote}}
value: {{ $value | quote }}
{{- end }}
{{- if .Values.extraEnvRaw }}
{{- toYaml .Values.extraEnvRaw | nindent 12 }}
{{- end }}
{{- end }}
envFrom:
- secretRef:
name: {{ tpl .Values.envFromSecret . | quote }}
@@ -103,9 +95,6 @@ spec:
mountPath: {{ .Values.extraConfigMountPath | quote }}
readOnly: true
{{- end }}
{{- with .Values.extraVolumeMounts }}
{{- tpl (toYaml .) $ | nindent 12 -}}
{{- end }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
@@ -138,6 +127,3 @@ spec:
configMap:
name: {{ template "superset.fullname" . }}-extra-config
{{- end }}
{{- with .Values.extraVolumes }}
{{- tpl (toYaml .) $ | nindent 8 -}}
{{- end }}

View File

@@ -36,15 +36,12 @@ spec:
containers:
- name: {{ template "superset.name" . }}-init-db
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
{{- if or .Values.extraEnv .Values.extraEnvRaw }}
{{ if .Values.extraEnv }}
env:
{{- range $key, $value := .Values.extraEnv }}
- name: {{ $key | quote }}
value: {{ $value | quote }}
{{- end }}
{{- if .Values.extraEnvRaw }}
{{- toYaml .Values.extraEnvRaw | nindent 10 }}
{{- end }}
{{- end }}
envFrom:
- secretRef:
@@ -63,9 +60,6 @@ spec:
mountPath: {{ .Values.extraConfigMountPath | quote }}
readOnly: true
{{- end }}
{{- with .Values.extraVolumeMounts }}
{{- tpl (toYaml .) $ | nindent 10 -}}
{{- end }}
command: {{ tpl (toJson .Values.init.command) . }}
resources:
{{ toYaml .Values.init.resources | indent 10 }}
@@ -82,8 +76,5 @@ spec:
configMap:
name: {{ template "superset.fullname" . }}-extra-config
{{- end }}
{{- with .Values.extraVolumes }}
{{- tpl (toYaml .) $ | nindent 8 -}}
{{- end }}
restartPolicy: Never
{{- end }}

View File

@@ -54,21 +54,11 @@ extraEnv: {}
# GUNICORN_TIMEOUT: 300
# OAUTH_HOME_DOMAIN: ..
# OAUTH_HOME_DOMAIN: ..
# # If a whitelist is not set, any address that can use your OAuth2 endpoint will be able to login.
# # this includes any random Gmail address if your OAuth2 Web App is set to External.
# OAUTH_WHITELIST_REGEX: ...
## Extra environment variables in RAW format that will be passed into pods
##
extraEnvRaw: []
# Load DB password from other secret (e.g. for zalando operator)
# - name: DB_PASS
# valueFrom:
# secretKeyRef:
# name: superset.superset-postgres.credentials.postgresql.acid.zalan.do
# key: password
## Extra environment variables to pass as secrets
##
extraSecretEnv: {}
@@ -92,22 +82,6 @@ extraConfigs: {}
extraSecrets: {}
extraVolumes: []
# - name: customConfig
# configMap:
# name: '{{ template "superset.fullname" . }}-custom-config'
# - name: additionalSecret
# secret:
# secretName: my-secret
# defaultMode: 0600
extraVolumeMounts: []
# - name: customConfig
# mountPath: /mnt/config
# readOnly: true
# - name: additionalSecret:
# mountPath: /mnt/secret
# A dictionary of overrides to append at the end of superset_config.py - the name does not matter
# WARNING: the order is not guaranteed
configOverrides: {}
@@ -193,15 +167,6 @@ resources: {}
# cpu: 100m
# memory: 128Mi
##
## Custom hostAliases for all superset pods
## https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/
hostAliases: []
# - hostnames:
# - nodns.my.lan
# ip: 18.27.36.45
##
## Superset node configuration
supersetNode:
@@ -217,7 +182,6 @@ supersetNode:
db_user: superset
db_pass: superset
db_name: superset
env: {}
forceReload: false # If true, forces deployment to reload on each upgrade
initContainers:
- name: wait-for-postgres
@@ -312,7 +276,6 @@ init:
command: [ "/bin/sh", "-c", "until nc -zv $DB_HOST $DB_PORT -w1; do echo 'waiting for db'; sleep 1; done" ]
initscript: |-
#!/bin/sh
set -eu
echo "Upgrading DB schema..."
superset db upgrade
echo "Initializing roles..."

View File

@@ -18,8 +18,3 @@
-e file:.
pyrsistent>=0.16.1,<0.17
zipp==3.4.1
sasl==0.3.1
packaging==21.0
wrapt==1.12.1
certifi==2021.5.30
charset-normalizer==2.0.4

View File

@@ -1,4 +1,4 @@
# SHA1:fe363b0ea02d7589c2ba5a1cf936247a966a6d5e
# SHA1:0862095245a068ae2fc00217da78331e1e7ae505
#
# This file is autogenerated by pip-compile-multi
# To update, run:
@@ -7,9 +7,9 @@
#
-e file:.
# via -r requirements/base.in
aiohttp==3.7.4.post0
aiohttp==3.7.2
# via slackclient
alembic==1.6.5
alembic==1.4.3
# via flask-migrate
amqp==2.6.1
# via kombu
@@ -17,17 +17,17 @@ apispec[yaml]==3.3.2
# via flask-appbuilder
async-timeout==3.0.1
# via aiohttp
attrs==21.2.0
attrs==20.2.0
# via
# aiohttp
# jsonschema
babel==2.9.1
babel==2.8.0
# via flask-babel
backoff==1.11.1
backoff==1.10.0
# via apache-superset
billiard==3.6.4.0
billiard==3.6.3.0
# via celery
bleach==3.3.1
bleach==3.3.0
# via apache-superset
brotli==1.0.9
# via flask-compress
@@ -35,18 +35,10 @@ cachelib==0.1.1
# via apache-superset
celery==4.4.7
# via apache-superset
certifi==2021.5.30
# via
# -r requirements/base.in
# requests
cffi==1.14.6
cffi==1.14.3
# via cryptography
chardet==4.0.0
chardet==3.0.4
# via aiohttp
charset-normalizer==2.0.4
# via
# -r requirements/base.in
# requests
click==7.1.2
# via
# apache-superset
@@ -56,23 +48,23 @@ colorama==0.4.4
# via
# apache-superset
# flask-appbuilder
convertdate==2.3.2
convertdate==2.3.0
# via holidays
cron-descriptor==1.2.24
# via apache-superset
croniter==1.0.15
croniter==0.3.36
# via apache-superset
cryptography==3.4.7
cryptography==3.3.2
# via apache-superset
defusedxml==0.7.1
defusedxml==0.6.0
# via python3-openid
deprecation==2.1.0
# via apache-superset
dnspython==2.1.0
dnspython==2.0.0
# via email-validator
email-validator==1.1.3
email-validator==1.1.1
# via flask-appbuilder
flask==1.1.4
flask==1.1.2
# via
# apache-superset
# flask-appbuilder
@@ -85,48 +77,47 @@ flask==1.1.4
# flask-openid
# flask-sqlalchemy
# flask-wtf
flask-appbuilder==3.4.3
flask-appbuilder==3.3.0
# via apache-superset
flask-babel==1.0.0
# via flask-appbuilder
flask-caching==1.10.1
# via apache-superset
flask-compress==1.10.1
flask-compress==1.8.0
# via apache-superset
flask-jwt-extended==3.25.1
flask-jwt-extended==3.24.1
# via flask-appbuilder
flask-login==0.4.1
# via flask-appbuilder
flask-migrate==3.1.0
flask-migrate==2.5.3
# via apache-superset
flask-openid==1.3.0
flask-openid==1.2.5
# via flask-appbuilder
flask-sqlalchemy==2.5.1
flask-sqlalchemy==2.4.4
# via
# flask-appbuilder
# flask-migrate
flask-talisman==0.8.1
flask-talisman==0.7.0
# via apache-superset
flask-wtf==0.14.3
# via
# apache-superset
# flask-appbuilder
geographiclib==1.52
geographiclib==1.50
# via geopy
geopy==2.2.0
geopy==2.0.0
# via apache-superset
graphlib-backport==1.0.3
# via apache-superset
gunicorn==20.1.0
gunicorn==20.0.4
# via apache-superset
holidays==0.10.3
# via apache-superset
humanize==3.11.0
humanize==3.1.0
# via apache-superset
idna==3.2
idna==2.10
# via
# email-validator
# requests
# yarl
isodate==0.6.0
# via apache-superset
@@ -145,16 +136,16 @@ kombu==4.6.11
# via celery
korean-lunar-calendar==0.2.1
# via holidays
mako==1.1.4
mako==1.1.3
# via alembic
markdown==3.3.4
markdown==3.3.3
# via apache-superset
markupsafe==2.0.1
markupsafe==1.1.1
# via
# jinja2
# mako
# wtforms
marshmallow==3.13.0
marshmallow==3.9.0
# via
# flask-appbuilder
# marshmallow-enum
@@ -163,22 +154,23 @@ marshmallow-enum==1.5.1
# via flask-appbuilder
marshmallow-sqlalchemy==0.23.1
# via flask-appbuilder
msgpack==1.0.2
msgpack==1.0.0
# via apache-superset
multidict==5.1.0
multidict==5.0.0
# via
# aiohttp
# yarl
numpy==1.21.1
natsort==7.0.1
# via croniter
numpy==1.19.4
# via
# pandas
# pyarrow
packaging==21.0
packaging==20.4
# via
# -r requirements/base.in
# bleach
# deprecation
pandas==1.2.5
pandas==1.2.2
# via apache-superset
parsedatetime==2.6
# via apache-superset
@@ -186,7 +178,7 @@ pgsanity==0.2.9
# via apache-superset
polyline==1.4.0
# via apache-superset
prison==0.2.1
prison==0.1.3
# via flask-appbuilder
pyarrow==4.0.1
# via apache-superset
@@ -197,7 +189,7 @@ pyjwt==1.7.1
# apache-superset
# flask-appbuilder
# flask-jwt-extended
pymeeus==0.5.11
pymeeus==0.3.7
# via convertdate
pyparsing==2.4.7
# via
@@ -207,7 +199,7 @@ pyrsistent==0.16.1
# via
# -r requirements/base.in
# jsonschema
python-dateutil==2.8.2
python-dateutil==2.8.1
# via
# alembic
# apache-superset
@@ -215,7 +207,7 @@ python-dateutil==2.8.2
# flask-appbuilder
# holidays
# pandas
python-dotenv==0.19.0
python-dotenv==0.15.0
# via apache-superset
python-editor==1.0.4
# via alembic
@@ -223,7 +215,7 @@ python-geohash==0.8.5
# via apache-superset
python3-openid==3.2.0
# via flask-openid
pytz==2021.1
pytz==2020.4
# via
# babel
# celery
@@ -236,32 +228,29 @@ pyyaml==5.4.1
# apispec
redis==3.5.3
# via apache-superset
requests==2.26.0
# via apache-superset
sasl==0.3.1
# via -r requirements/base.in
selenium==3.141.0
# via apache-superset
simplejson==3.17.3
simplejson==3.17.2
# via apache-superset
six==1.16.0
six==1.15.0
# via
# bleach
# cryptography
# flask-jwt-extended
# flask-talisman
# holidays
# isodate
# jsonschema
# packaging
# polyline
# prison
# pyrsistent
# python-dateutil
# sasl
# sqlalchemy-utils
# wtforms-json
slackclient==2.5.0
# via apache-superset
sqlalchemy==1.3.24
sqlalchemy==1.3.20
# via
# alembic
# apache-superset
@@ -269,7 +258,7 @@ sqlalchemy==1.3.24
# flask-sqlalchemy
# marshmallow-sqlalchemy
# sqlalchemy-utils
sqlalchemy-utils==0.37.8
sqlalchemy-utils==0.36.8
# via
# apache-superset
# flask-appbuilder
@@ -277,14 +266,12 @@ sqlparse==0.3.0
# via apache-superset
tabulate==0.8.9
# via apache-superset
typing-extensions==3.10.0.0
typing-extensions==3.7.4.3
# via
# aiohttp
# apache-superset
urllib3==1.26.6
# via
# requests
# selenium
urllib3==1.25.11
# via selenium
vine==1.3.0
# via
# amqp
@@ -295,15 +282,13 @@ werkzeug==1.0.1
# via
# flask
# flask-jwt-extended
wrapt==1.12.1
# via -r requirements/base.in
wtforms==2.3.3
# via
# flask-wtf
# wtforms-json
wtforms-json==0.3.3
# via apache-superset
yarl==1.6.3
yarl==1.6.2
# via aiohttp
zipp==3.4.1
# via -r requirements/base.in

View File

@@ -18,11 +18,11 @@
-r base.in
flask-cors>=2.0.0
mysqlclient==1.4.2.post1
pillow>=8.3.1,<9
pillow>=7.0.0,<8.0.0
pydruid>=0.6.1,<0.7
pyhive[hive]>=0.6.1
psycopg2-binary==2.8.5
tableschema
thrift>=0.11.0,<1.0.0
pygithub>=1.54.1,<2.0.0
progress>=1.5,<2
pyinstrument>=4.0.2,<5

View File

@@ -1,4 +1,4 @@
# SHA1:dbd3e93a11a36fc6b18d6194ac96ba29bd0ad2a8
# SHA1:c470411e2e9cb04b412a94f80a6a9d870bece74d
#
# This file is autogenerated by pip-compile-multi
# To update, run:
@@ -8,68 +8,84 @@
-r base.txt
-e file:.
# via -r requirements/base.in
boto3==1.18.19
boto3==1.16.10
# via tabulator
botocore==1.21.19
botocore==1.19.10
# via
# boto3
# s3transfer
cached-property==1.5.2
# via tableschema
et-xmlfile==1.1.0
certifi==2020.6.20
# via requests
deprecated==1.2.11
# via pygithub
et-xmlfile==1.0.1
# via openpyxl
flask-cors==3.0.10
flask-cors==3.0.9
# via -r requirements/development.in
future==0.18.2
# via pyhive
ijson==3.1.4
ijson==3.1.2.post0
# via tabulator
jdcal==1.4.1
# via openpyxl
jmespath==0.10.0
# via
# boto3
# botocore
jsonlines==2.0.0
jsonlines==1.2.0
# via tabulator
linear-tsv==1.1.0
# via tabulator
mysqlclient==1.4.2.post1
# via -r requirements/development.in
openpyxl==3.0.7
openpyxl==3.0.5
# via tabulator
pillow==8.3.1
pillow==7.2.0
# via -r requirements/development.in
progress==1.6
progress==1.5
# via -r requirements/development.in
psycopg2-binary==2.8.5
# via -r requirements/development.in
pure-sasl==0.6.2
# via thrift-sasl
pydruid==0.6.2
pydruid==0.6.1
# via -r requirements/development.in
pyhive[hive]==0.6.4
pygithub==1.54.1
# via -r requirements/development.in
pyinstrument==4.0.2
pyhive[hive]==0.6.3
# via -r requirements/development.in
rfc3986==1.5.0
requests==2.24.0
# via
# pydruid
# pygithub
# tableschema
# tabulator
rfc3986==1.4.0
# via tableschema
s3transfer==0.5.0
s3transfer==0.3.3
# via boto3
tableschema==1.20.2
sasl==0.2.1
# via
# pyhive
# thrift-sasl
tableschema==1.20.0
# via -r requirements/development.in
tabulator==1.53.5
tabulator==1.52.5
# via tableschema
thrift==0.13.0
# via
# -r requirements/development.in
# pyhive
# thrift-sasl
thrift-sasl==0.4.3
thrift-sasl==0.4.2
# via pyhive
unicodecsv==0.14.1
# via
# tableschema
# tabulator
xlrd==2.0.1
wrapt==1.12.1
# via deprecated
xlrd==1.2.0
# via tabulator
# The following packages are considered to be unsafe in a requirements file:

View File

@@ -8,15 +8,15 @@
-r base.txt
-e file:.
# via -r requirements/base.in
gevent==21.8.0
gevent==20.9.0
# via -r requirements/docker.in
greenlet==1.1.1
greenlet==0.4.17
# via gevent
psycopg2-binary==2.9.1
psycopg2-binary==2.8.6
# via -r requirements/docker.in
zope.event==4.5.0
# via gevent
zope.interface==5.4.0
zope.interface==5.1.2
# via gevent
# The following packages are considered to be unsafe in a requirements file:

View File

@@ -17,7 +17,3 @@
pip-compile-multi!=1.5.9
pre-commit
tox
py>=1.10.0
click==7.1.2
packaging==21.0
pyparsing==2.4.7

View File

@@ -1,76 +1,62 @@
# SHA1:32bae3a7c758a411c20c86ff4d5bff825be46314
# SHA1:f95c1152ed0bcc554f3668440d63eec2a7d1567c
#
# This file is autogenerated by pip-compile-multi
# To update, run:
#
# pip-compile-multi
#
backports.entry-points-selectable==1.1.0
appdirs==1.4.4
# via virtualenv
cfgv==3.3.0
cfgv==3.2.0
# via pre-commit
click==7.1.2
# via
# -r requirements/integration.in
# pip-compile-multi
# pip-tools
distlib==0.3.2
distlib==0.3.1
# via virtualenv
filelock==3.0.12
# via
# tox
# virtualenv
identify==2.2.13
identify==1.5.9
# via pre-commit
nodeenv==1.6.0
nodeenv==1.5.0
# via pre-commit
packaging==21.0
# via
# -r requirements/integration.in
# tox
pep517==0.11.0
# via pip-tools
packaging==20.4
# via tox
pip-compile-multi==2.4.1
# via -r requirements/integration.in
pip-tools==6.2.0
pip-tools==5.3.1
# via pip-compile-multi
platformdirs==2.2.0
# via virtualenv
pluggy==0.13.1
# via tox
pre-commit==2.14.0
pre-commit==2.8.2
# via -r requirements/integration.in
py==1.10.0
# via
# -r requirements/integration.in
# tox
py==1.9.0
# via tox
pyparsing==2.4.7
# via
# -r requirements/integration.in
# packaging
# via packaging
pyyaml==5.4.1
# via pre-commit
six==1.16.0
six==1.15.0
# via
# packaging
# pip-tools
# tox
# virtualenv
toml==0.10.2
# via
# pre-commit
# tox
tomli==1.2.1
# via pep517
toposort==1.6
toposort==1.5
# via pip-compile-multi
tox==3.24.1
tox==3.20.1
# via -r requirements/integration.in
virtualenv==20.7.2
virtualenv==20.1.0
# via
# pre-commit
# tox
wheel==0.37.0
# via pip-tools
# The following packages are considered to be unsafe in a requirements file:
# pip
# setuptools

View File

@@ -22,15 +22,14 @@ freezegun
ipdb
# pinning ipython as pip-compile-multi was bringing higher version
# of the ipython that was not found in CI
ipython
ipython==7.16.1
openapi-spec-validator
openpyxl
parameterized
pyfakefs
pyhive[presto]>=0.6.3
pylint==2.9.6
pylint
pytest
pytest-cov
statsd
pytest-mock
packaging==21.0

View File

@@ -1,4 +1,4 @@
# SHA1:97a1d3094738243d47824948a0d6fdcb4a784524
# SHA1:d39180c0eb498d1a7dd73b8428e6ab304b728484
#
# This file is autogenerated by pip-compile-multi
# To update, run:
@@ -11,86 +11,78 @@
# via -r requirements/base.in
appnope==0.1.2
# via ipython
astroid==2.6.6
astroid==2.4.2
# via pylint
backcall==0.2.0
# via ipython
coverage==5.5
coverage==5.3
# via pytest-cov
decorator==5.0.9
# via
# ipdb
# ipython
docker==5.0.0
# via ipython
docker==4.3.1
# via -r requirements/testing.in
flask-testing==0.8.1
flask-testing==0.8.0
# via -r requirements/testing.in
freezegun==1.1.0
freezegun==1.0.0
# via -r requirements/testing.in
iniconfig==1.1.1
# via pytest
ipdb==0.13.9
ipdb==0.13.4
# via -r requirements/testing.in
ipython==7.26.0
ipython==7.16.1
# via
# -r requirements/testing.in
# ipdb
ipython-genutils==0.2.0
# via traitlets
isort==5.9.3
isort==5.6.4
# via pylint
jedi==0.18.0
jedi==0.17.2
# via ipython
lazy-object-proxy==1.6.0
lazy-object-proxy==1.4.3
# via astroid
matplotlib-inline==0.1.2
# via ipython
mccabe==0.6.1
# via pylint
openapi-schema-validator==0.1.5
# via openapi-spec-validator
openapi-spec-validator==0.3.1
openapi-spec-validator==0.2.9
# via -r requirements/testing.in
parameterized==0.8.1
parameterized==0.7.4
# via -r requirements/testing.in
parso==0.8.2
parso==0.7.1
# via jedi
pexpect==4.8.0
# via ipython
pickleshare==0.7.5
# via ipython
prompt-toolkit==3.0.19
prompt-toolkit==3.0.8
# via ipython
ptyprocess==0.7.0
ptyprocess==0.6.0
# via pexpect
pyfakefs==4.5.0
pyfakefs==4.4.0
# via -r requirements/testing.in
pygments==2.9.0
pygments==2.7.2
# via ipython
pyhive[hive,presto]==0.6.4
pyhive[hive,presto]==0.6.3
# via
# -r requirements/development.in
# -r requirements/testing.in
pylint==2.9.6
pylint==2.6.0
# via -r requirements/testing.in
pytest==6.2.4
pytest==6.1.2
# via
# -r requirements/testing.in
# pytest-cov
# pytest-mock
pytest-cov==2.12.1
pytest-cov==2.10.1
# via -r requirements/testing.in
pytest-mock==3.6.1
# via -r requirements/testing.in
statsd==3.3.0
# via -r requirements/testing.in
traitlets==5.0.5
# via
# ipython
# matplotlib-inline
# via ipython
wcwidth==0.2.5
# via prompt-toolkit
websocket-client==1.2.0
websocket-client==0.57.0
# via docker
# The following packages are considered to be unsafe in a requirements file:

View File

@@ -44,13 +44,9 @@ def import_migration_script(filepath: Path) -> ModuleType:
Import migration script as if it were a module.
"""
spec = importlib.util.spec_from_file_location(filepath.stem, filepath)
if spec:
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module) # type: ignore
return module
raise Exception(
"No module spec found in location: `{path}`".format(path=str(filepath))
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module) # type: ignore
return module
def extract_modified_tables(module: ModuleType) -> Set[str]:

View File

@@ -34,10 +34,10 @@ REGEXES=()
for CHECK in "$@"
do
if [[ ${CHECK} == "python" ]]; then
REGEX="(^\.github\/workflows\/.*python|^tests\/|^superset\/|^setup\.py|^requirements\/.+\.txt|^\.pylintrc)"
REGEX="(^\.github\/workflows\/.*python|^tests\/|^superset\/|^setup\.py|^requirements\/.+\.txt)"
echo "Searching for changes in python files"
elif [[ ${CHECK} == "frontend" ]]; then
REGEX="(^\.github\/workflows\/.*(bashlib|frontend|e2e)|^superset-frontend\/)"
REGEX="(^\.github\/workflows\/.*(frontend|e2e)|^superset-frontend\/)"
echo "Searching for changes in frontend files"
else
echo "Invalid check: \"${CHECK}\". Falling back to exiting with FAILURE code"

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
REQUIRED_VERSION=2
LOCKFILE_VERSION=$(sed -n 's/[ \t]*"lockfileVersion"\: \([0-9]*\),/\1/p' "$1")
if [[ $LOCKFILE_VERSION != "$REQUIRED_VERSION" ]]; then
echo >&2 "Incorrect npm lock file version: $LOCKFILE_VERSION (Version $REQUIRED_VERSION required)"
exit 1
else
echo "Correct npm lock file version: $LOCKFILE_VERSION"
exit 0
fi

View File

@@ -18,11 +18,6 @@
#
set -e
# Temporary fix, probably related with https://bugs.launchpad.net/ubuntu/+source/opencv/+bug/1890170
# MySQL was failling with:
# from . import _mysql
# ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: cannot allocate memory in static TLS block
export LD_PRELOAD=/lib/x86_64-linux-gnu/libstdc++.so.6
export SUPERSET_CONFIG=${SUPERSET_CONFIG:-tests.integration_tests.superset_test_config}
export SUPERSET_TESTENV=true
echo "Superset config module: $SUPERSET_CONFIG"

View File

@@ -30,7 +30,7 @@ combine_as_imports = true
include_trailing_comma = true
line_length = 88
known_first_party = superset
known_third_party =alembic,apispec,backoff,bleach,cachelib,celery,click,colorama,cron_descriptor,croniter,cryptography,dateutil,deprecation,flask,flask_appbuilder,flask_babel,flask_caching,flask_compress,flask_jwt_extended,flask_login,flask_migrate,flask_sqlalchemy,flask_talisman,flask_testing,flask_wtf,freezegun,geohash,geopy,graphlib,holidays,humanize,isodate,jinja2,jwt,markdown,markupsafe,marshmallow,marshmallow_enum,msgpack,numpy,pandas,parameterized,parsedatetime,pgsanity,pkg_resources,polyline,prison,progress,pyarrow,pyhive,pyparsing,pytest,pytest_mock,pytz,redis,requests,selenium,setuptools,simplejson,slack,sqlalchemy,sqlalchemy_utils,sqlparse,typing_extensions,urllib3,werkzeug,wtforms,wtforms_json,yaml
known_third_party =alembic,apispec,backoff,bleach,cachelib,celery,click,colorama,cron_descriptor,croniter,cryptography,dateutil,deprecation,flask,flask_appbuilder,flask_babel,flask_caching,flask_compress,flask_jwt_extended,flask_login,flask_migrate,flask_sqlalchemy,flask_talisman,flask_testing,flask_wtf,freezegun,geohash,geopy,graphlib,holidays,humanize,isodate,jinja2,jwt,markdown,markupsafe,marshmallow,marshmallow_enum,msgpack,numpy,pandas,parameterized,parsedatetime,pgsanity,pkg_resources,polyline,prison,progress,pyarrow,pyhive,pyparsing,pytest,pytest_mock,pytz,redis,requests,selenium,setuptools,simplejson,slack,sqlalchemy,sqlalchemy_utils,sqlparse,tabulate,typing_extensions,werkzeug,wtforms,wtforms_json,yaml
multi_line_output = 3
order_by_type = false

View File

@@ -75,7 +75,7 @@ setup(
"cryptography>=3.3.2",
"deprecation>=2.1.0, <2.2.0",
"flask>=1.1.0, <2.0.0",
"flask-appbuilder>=3.4.3, <4.0.0",
"flask-appbuilder>=3.3.0, <4.0.0",
"flask-caching>=1.10.0",
"flask-compress",
"flask-talisman",
@@ -83,7 +83,7 @@ setup(
"flask-wtf",
"geopy",
"graphlib-backport",
"gunicorn>=20.1.0",
"gunicorn>=20.0.2, <20.1",
"holidays==0.10.3", # PINNED! https://github.com/dr-prodigy/python-holidays/issues/406
"humanize",
"itsdangerous>=1.0.0, <2.0.0", # https://github.com/apache/superset/pull/14627
@@ -102,20 +102,18 @@ setup(
"pyyaml>=5.4",
"PyJWT>=1.7.1, <2",
"redis",
"requests==2.26.0",
"selenium>=3.141.0",
"simplejson>=3.15.0",
"slackclient==2.5.0", # PINNED! slack changes file upload api in the future versions
"sqlalchemy>=1.3.16, <1.4, !=1.3.21",
"sqlalchemy-utils>=0.37.8, <0.38",
"sqlalchemy-utils>=0.36.6,<0.37",
"sqlparse==0.3.0", # PINNED! see https://github.com/andialbrecht/sqlparse/issues/562
"tabulate==0.8.9",
"typing-extensions>=3.10, <4", # needed to support Literal (3.8) and TypeGuard (3.10)
"typing-extensions>=3.7.4.3,<4", # needed to support typing.Literal on py37
"wtforms-json",
],
extras_require={
"athena": ["pyathena>=1.10.8, <1.11"],
"aurora-data-api": ["preset-sqlalchemy-aurora-data-api>=0.2.8,<0.3"],
"athena": ["pyathena>=1.10.8,<1.11"],
"bigquery": [
"pandas_gbq>=0.10.0",
"pybigquery>=0.4.10",
@@ -135,8 +133,7 @@ setup(
"exasol": ["sqlalchemy-exasol>=2.1.0, <2.2"],
"excel": ["xlrd>=1.2.0, <1.3"],
"firebird": ["sqlalchemy-firebird>=0.7.0, <0.8"],
"firebolt": ["firebolt-sqlalchemy>=0.0.1"],
"gsheets": ["shillelagh[gsheetsapi]>=1.0.3, <2"],
"gsheets": ["shillelagh[gsheetsapi]>=0.7.1, <0.8"],
"hana": ["hdbcli==2.4.162", "sqlalchemy_hana==0.4.0"],
"hive": ["pyhive[hive]>=0.6.1", "tableschema", "thrift>=0.11.0, <1.0.0"],
"impala": ["impyla>0.16.2, <0.17"],
@@ -150,13 +147,7 @@ setup(
"trino": ["sqlalchemy-trino>=0.2"],
"prophet": ["prophet>=1.0.1, <1.1", "pystan<3.0"],
"redshift": ["sqlalchemy-redshift>=0.8.1, < 0.9"],
"rockset": ["rockset>=0.7.68, <0.8"],
"shillelagh": [
"shillelagh[datasetteapi,gsheetsapi,socrata,weatherapi]>=1.0.3, <2"
],
"snowflake": [
"snowflake-sqlalchemy==1.2.4"
], # PINNED! 1.2.5 introduced breaking changes requiring sqlalchemy>=1.4.0
"snowflake": ["snowflake-sqlalchemy>=1.2.3, <1.3"],
"teradata": ["sqlalchemy-teradata==0.9.0.dev0"],
"thumbnails": ["Pillow>=7.0.0, <8.0.0"],
"vertica": ["sqlalchemy-vertica-python>=0.5.9, < 0.6"],
@@ -170,6 +161,5 @@ setup(
classifiers=[
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
],
)

View File

@@ -18,10 +18,10 @@
**/*.sh
coverage/**
dist/*
src/assets/images/*
src/assets/stylesheets/*
images/*
node_modules/*
node_modules*/*
stylesheets/*
vendor/*
docs/*
src/dashboard/deprecated/*

View File

@@ -167,7 +167,6 @@ module.exports = {
'src/**/*.test.tsx',
'src/**/*.test.js',
'src/**/*.test.jsx',
'src/**/fixtures.*',
],
plugins: ['jest', 'jest-dom', 'no-only-tests', 'testing-library'],
env: {

View File

@@ -22,15 +22,13 @@ const path = require('path');
const customConfig = require('../webpack.config.js');
module.exports = {
core: {
builder: 'webpack5',
},
stories: ['../src/@(components|common|filters)/**/*.stories.@(t|j)sx'],
addons: [
'@storybook/addon-essentials',
'@storybook/addon-links',
'@storybook/preset-typescript',
'storybook-addon-jsx',
'@storybook/addon-knobs',
'@storybook/addon-knobs/register',
'storybook-addon-paddings',
],
webpackFinal: config => ({

View File

@@ -20,7 +20,7 @@ import React from 'react';
import { addDecorator } from '@storybook/react';
import { jsxDecorator } from 'storybook-addon-jsx';
import { addParameters } from '@storybook/react';
import WithPaddings from 'storybook-addon-paddings';
import { withPaddings } from 'storybook-addon-paddings';
import { supersetTheme, ThemeProvider } from '@superset-ui/core';
import { combineReducers, createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
@@ -49,18 +49,15 @@ const providerDecorator = Story => (
addDecorator(jsxDecorator);
addDecorator(themeDecorator);
addDecorator(providerDecorator);
addDecorator(WithPaddings);
addDecorator(withPaddings);
addParameters({
paddings: {
values: [
{ name: 'None', value: '0px' },
{ name: 'Small', value: '16px' },
{ name: 'Medium', value: '32px' },
{ name: 'Large', value: '64px' },
],
default: 'Medium',
},
paddings: [
{ name: 'None', value: '0px' },
{ name: 'Small', value: '16px' },
{ name: 'Medium', value: '32px', default: true },
{ name: 'Large', value: '64px' },
],
options: {
storySort: {
method: 'alphabetical',

View File

@@ -82,8 +82,5 @@ module.exports = {
],
],
},
testableProduction: {
plugins: [],
},
},
};

View File

@@ -27,34 +27,44 @@ describe('chart card view filters', () => {
it('should filter by owners correctly', () => {
// filter by owners
cy.get('[data-test="filters-select"]').first().click();
cy.get('.rc-virtual-list').contains('alpha user').click();
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('alpha user').click();
cy.get('[data-test="styled-card"]').should('not.exist');
cy.get('[data-test="filters-select"]').first().click();
cy.get('.rc-virtual-list').contains('gamma user').click();
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('gamma user').click();
cy.get('[data-test="styled-card"]').should('not.exist');
});
it('should filter by me correctly', () => {
// filter by me
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('me').click();
cy.get('[data-test="styled-card"]').its('length').should('be.gt', 0);
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('me').click();
cy.get('[data-test="styled-card"]').its('length').should('be.gt', 0);
});
it('should filter by created by correctly', () => {
// filter by created by
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('.rc-virtual-list').contains('alpha user').click();
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('alpha user').click();
cy.get('.ant-card').should('not.exist');
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('.rc-virtual-list').contains('gamma user').click();
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('gamma user').click();
cy.get('[data-test="styled-card"]').should('not.exist');
});
xit('should filter by viz type correctly', () => {
// filter by viz type
cy.get('[data-test="filters-select"]').eq(2).click();
cy.get('.rc-virtual-list').contains('area').click({ timeout: 5000 });
cy.get('.Select__control').eq(2).click();
cy.get('.Select__menu').contains('area').click({ timeout: 5000 });
cy.get('[data-test="styled-card"]').its('length').should('be.gt', 0);
cy.get('[data-test="styled-card"]')
.contains("World's Pop Growth")
.should('be.visible');
cy.get('[data-test="filters-select"]').eq(2).click();
cy.get('[data-test="filters-select"]').eq(2).type('world_map{enter}');
cy.get('.Select__control').eq(2).click();
cy.get('.Select__control').eq(2).type('world_map{enter}');
cy.get('[data-test="styled-card"]').should('have.length', 1);
cy.get('[data-test="styled-card"]')
.contains('% Rural')
@@ -63,16 +73,14 @@ describe('chart card view filters', () => {
it('should filter by datasource correctly', () => {
// filter by datasource
cy.get('[data-test="filters-select"]').eq(3).click();
cy.get('.rc-virtual-list').contains('unicode_test').click();
cy.get('.Select__control').eq(3).click();
cy.get('.Select__menu').contains('unicode_test').click();
cy.get('[data-test="styled-card"]').should('have.length', 1);
cy.get('[data-test="styled-card"]')
.contains('Unicode Cloud')
.should('be.visible');
cy.get('[data-test="filters-select"]').eq(2).click();
cy.get('[data-test="filters-select"]')
.eq(2)
.type('energy_usage{enter}{enter}');
cy.get('.Select__control').eq(2).click();
cy.get('.Select__control').eq(2).type('energy_usage{enter}{enter}');
cy.get('[data-test="styled-card"]').its('length').should('be.gt', 0);
});
});
@@ -86,49 +94,57 @@ describe('chart list view filters', () => {
it('should filter by owners correctly', () => {
// filter by owners
cy.get('[data-test="filters-select"]').first().click();
cy.get('.rc-virtual-list').contains('alpha user').click();
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('alpha user').click();
cy.get('[data-test="table-row"]').should('not.exist');
cy.get('[data-test="filters-select"]').first().click();
cy.get('.rc-virtual-list').contains('gamma user').click();
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('gamma user').click();
cy.get('[data-test="table-row"]').should('not.exist');
});
it('should filter by me correctly', () => {
// filter by me
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('me').click();
cy.get('[data-test="table-row"]').its('length').should('be.gt', 0);
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('me').click();
cy.get('[data-test="table-row"]').its('length').should('be.gt', 0);
});
it('should filter by created by correctly', () => {
// filter by created by
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('.rc-virtual-list').contains('alpha user').click();
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('alpha user').click();
cy.get('[data-test="table-row"]').should('not.exist');
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('.rc-virtual-list').contains('gamma user').click();
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('gamma user').click();
cy.get('[data-test="table-row"]').should('not.exist');
});
// this is flaky, but seems to fail along with the card view test of the same name
xit('should filter by viz type correctly', () => {
// filter by viz type
cy.get('[data-test="filters-select"]').eq(2).click();
cy.get('.rc-virtual-list').contains('area').click({ timeout: 5000 });
cy.get('.Select__control').eq(2).click();
cy.get('.Select__menu').contains('area').click({ timeout: 5000 });
cy.get('[data-test="table-row"]').its('length').should('be.gt', 0);
cy.get('[data-test="table-row"]')
.contains("World's Pop Growth")
.should('exist');
cy.get('[data-test="filters-select"]').eq(2).click();
cy.get('[data-test="filters-select"]').eq(2).type('world_map{enter}');
cy.get('.Select__control').eq(2).click();
cy.get('.Select__control').eq(2).type('world_map{enter}');
cy.get('[data-test="table-row"]').should('have.length', 1);
cy.get('[data-test="table-row"]').contains('% Rural').should('exist');
});
it('should filter by datasource correctly', () => {
// filter by datasource
cy.get('[data-test="filters-select"]').eq(3).click();
cy.get('.rc-virtual-list').contains('unicode_test').click();
cy.get('.Select__control').eq(3).click();
cy.get('.Select__menu').contains('unicode_test').click();
cy.get('[data-test="table-row"]').should('have.length', 1);
cy.get('[data-test="table-row"]').contains('Unicode Cloud').should('exist');
cy.get('[data-test="filters-select"]').eq(3).click();
cy.get('[data-test="filters-select"]')
.eq(3)
.type('energy_usage{enter}{enter}');
cy.get('.Select__control').eq(3).click();
cy.get('.Select__control').eq(3).type('energy_usage{enter}{enter}');
cy.get('[data-test="table-row"]').its('length').should('be.gt', 0);
});
});

View File

@@ -24,10 +24,10 @@ import { WORLD_HEALTH_DASHBOARD } from './dashboard.helper';
function selectColorScheme(color: string) {
// open color scheme dropdown
cy.get('.ant-modal-body')
.contains('Color scheme')
cy.get('.modal-body')
.contains('Color Scheme')
.parents('.ControlHeader')
.next('.ant-select')
.next('.Select')
.click()
.then($colorSelect => {
// select a new color scheme
@@ -37,7 +37,7 @@ function selectColorScheme(color: string) {
function assertMetadata(text: string) {
const regex = new RegExp(text);
cy.get('.ant-modal-body')
cy.get('.modal-body')
.find('#json_metadata')
.should('be.visible')
.then(() => {
@@ -50,15 +50,12 @@ function assertMetadata(text: string) {
}
function typeMetadata(text: string) {
cy.get('.ant-modal-body')
.find('#json_metadata')
.should('be.visible')
.type(text);
cy.get('.modal-body').find('#json_metadata').should('be.visible').type(text);
}
function openAdvancedProperties() {
return cy
.get('.ant-modal-body')
.get('.modal-body')
.contains('Advanced')
.should('be.visible')
.click();
@@ -99,11 +96,11 @@ describe('Dashboard edit action', () => {
// save edit changes
cy.get('.ant-modal-footer')
.contains('Apply')
.contains('Save')
.click()
.then(() => {
// assert that modal edit window has closed
cy.get('.ant-modal-body').should('not.be.visible');
cy.get('.ant-modal-body').should('not.exist');
// assert title has been updated
cy.get('.editable-title input').should('have.value', dashboardTitle);
@@ -149,7 +146,7 @@ describe('Dashboard edit action', () => {
.click()
.then(() => {
// assert that modal edit window has closed
cy.get('.ant-modal-body').should('not.exist');
cy.get('.modal-body').should('not.exist');
// assert color has been updated
openDashboardEditProperties();
@@ -180,7 +177,7 @@ describe('Dashboard edit action', () => {
.click()
.then(() => {
// assert that modal edit window has closed
cy.get('.ant-modal-body')
cy.get('.modal-body')
.contains('A valid color scheme is required')
.should('be.visible');
});

View File

@@ -24,7 +24,11 @@ describe('Dashboard edit markdown', () => {
cy.visit(TABBED_DASHBOARD);
});
it('should add markdown component to dashboard', () => {
it('should load AceEditor on demand', () => {
let numScripts = 0;
cy.get('script').then(nodes => {
numScripts = nodes.length;
});
cy.get('[data-test="dashboard-header"]')
.find('[aria-label="edit-alt"]')
.click();
@@ -33,6 +37,11 @@ describe('Dashboard edit markdown', () => {
cy.get('[data-test="dashboard-header"]')
.find('[aria-label="more-horiz"]')
.click();
cy.get('script').then(nodes => {
// load 5 new script chunks for css editor
expect(nodes.length).to.greaterThan(numScripts);
numScripts = nodes.length;
});
cy.get('[data-test="grid-row-background--transparent"]')
.first()
.as('component-background-first');
@@ -40,6 +49,11 @@ describe('Dashboard edit markdown', () => {
drag('[data-test="new-component"]', 'Markdown').to(
'@component-background-first',
);
cy.get('script').then(nodes => {
// load more scripts for markdown editor
expect(nodes.length).to.greaterThan(numScripts);
numScripts = nodes.length;
});
cy.get('[data-test="dashboard-markdown-editor"]')
.should(
'have.text',
@@ -61,6 +75,12 @@ describe('Dashboard edit markdown', () => {
cy.get('[data-test="dashboard-markdown-editor"]').contains('Test resize');
// entering edit mode does not add new scripts
// (though scripts may still be removed by others)
cy.get('script').then(nodes => {
expect(nodes.length).to.greaterThan(numScripts);
});
cy.get('@component-background-first').click('right');
cy.get('[data-test="dashboard-component-chart-holder"]')
.find('.ace_content')

View File

@@ -40,8 +40,8 @@ xdescribe('Nativefilters', () => {
.click();
cy.get('[data-test="query-save-button"]').click();
cy.get('[data-test="save-chart-modal-select-dashboard-form"]')
.find('input[aria-label="Select a dashboard"]')
.type(`${dashboard}`, { force: true });
.find('#dashboard-creatable-select')
.type(`${dashboard}{enter}{enter}`);
cy.get('[data-test="btn-modal-save"]').click();
});
beforeEach(() => {

View File

@@ -67,25 +67,25 @@ describe('Dashboard save action', () => {
// should load chart
WORLD_HEALTH_CHARTS.forEach(waitForChartLoad);
// remove treemap chart from dashboard
// remove box_plot chart from dashboard
cy.get('[aria-label="edit-alt"]').click({ timeout: 5000 });
cy.get('[data-test="dashboard-delete-component-button"]')
.last()
.trigger('mouseenter')
.trigger('moustenter')
.click();
cy.get('[data-test="grid-container"]')
.find('.box_plot')
.should('not.exist');
cy.intercept('PUT', '/api/v1/dashboard/**').as('putDashboardRequest');
cy.intercept('POST', '/superset/save_dash/**/').as('saveRequest');
cy.get('[data-test="dashboard-header"]')
.find('[data-test="header-save-button"]')
.contains('Save')
.click();
// go back to view mode
cy.wait('@putDashboardRequest');
cy.wait('@saveRequest');
cy.get('[data-test="dashboard-header"]')
.find('[aria-label="edit-alt"]')
.click();

View File

@@ -27,34 +27,44 @@ describe('dashboard filters card view', () => {
it('should filter by owners correctly', () => {
// filter by owners
cy.get('[data-test="filters-select"]').first().click();
cy.get('.rc-virtual-list').contains('alpha user').click();
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('alpha user').click();
cy.get('[data-test="styled-card"]').should('not.exist');
cy.get('[data-test="filters-select"]').first().click();
cy.get('.rc-virtual-list').contains('gamma user').click();
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('gamma user').click();
cy.get('[data-test="styled-card"]').should('not.exist');
});
it('should filter by me correctly', () => {
// filter by me
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('me').click();
cy.get('[data-test="styled-card"]').its('length').should('be.gt', 0);
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('me').click();
cy.get('[data-test="styled-card"]').its('length').should('be.gt', 0);
});
it('should filter by created by correctly', () => {
// filter by created by
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('.rc-virtual-list').contains('alpha user').click();
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('alpha user').click();
cy.get('.ant-card').should('not.exist');
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('.rc-virtual-list').contains('gamma user').click();
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('gamma user').click();
cy.get('.ant-card').should('not.exist');
});
it('should filter by published correctly', () => {
// filter by published
cy.get('[data-test="filters-select"]').eq(2).click();
cy.get('.rc-virtual-list').contains('Published').click({ timeout: 5000 });
cy.get('.Select__control').eq(2).click();
cy.get('.Select__menu').contains('Published').click({ timeout: 5000 });
cy.get('[data-test="styled-card"]').should('have.length', 3);
cy.get('[data-test="styled-card"]')
.contains('USA Births Names')
.should('be.visible');
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('[data-test="filters-select"]').eq(1).type('unpub{enter}');
cy.get('.Select__control').eq(1).click();
cy.get('.Select__control').eq(1).type('unpub{enter}');
cy.get('[data-test="styled-card"]').should('have.length', 3);
});
});
@@ -68,34 +78,44 @@ describe('dashboard filters list view', () => {
it('should filter by owners correctly', () => {
// filter by owners
cy.get('[data-test="filters-select"]').first().click();
cy.get('.rc-virtual-list').contains('alpha user').click();
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('alpha user').click();
cy.get('[data-test="table-row"]').should('not.exist');
cy.get('[data-test="filters-select"]').first().click();
cy.get('.rc-virtual-list').contains('gamma user').click();
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('gamma user').click();
cy.get('[data-test="table-row"]').should('not.exist');
});
it('should filter by me correctly', () => {
// filter by me
cy.get('.Select__control').first().click();
cy.get('.Select__menu').contains('me').click();
cy.get('[data-test="table-row"]').its('length').should('be.gt', 0);
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('me').click();
cy.get('[data-test="table-row"]').its('length').should('be.gt', 0);
});
it('should filter by created by correctly', () => {
// filter by created by
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('.rc-virtual-list').contains('alpha user').click();
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('alpha user').click();
cy.get('[data-test="table-row"]').should('not.exist');
cy.get('[data-test="filters-select"]').eq(1).click();
cy.get('.rc-virtual-list').contains('gamma user').click();
cy.get('.Select__control').eq(1).click();
cy.get('.Select__menu').contains('gamma user').click();
cy.get('[data-test="table-row"]').should('not.exist');
});
it('should filter by published correctly', () => {
// filter by published
cy.get('[data-test="filters-select"]').eq(2).click();
cy.get('.rc-virtual-list').contains('Published').click();
cy.get('.Select__control').eq(2).click();
cy.get('.Select__menu').contains('Published').click();
cy.get('[data-test="table-row"]').should('have.length', 3);
cy.get('[data-test="table-row"]')
.contains('USA Births Names')
.should('be.visible');
cy.get('[data-test="filters-select"]').eq(2).click();
cy.get('[data-test="filters-select"]').eq(2).type('unpub{enter}');
cy.get('.Select__control').eq(2).click();
cy.get('.Select__control').eq(2).type('unpub{enter}');
cy.get('[data-test="table-row"]').should('have.length', 3);
});
});

View File

@@ -26,6 +26,10 @@ describe('AdhocFilters', () => {
cy.verifySliceSuccess({ waitAlias: '@postJson' });
});
xit('Should not load mathjs when not needed', () => {
cy.get('script[src*="mathjs"]').should('have.length', 0);
});
let numScripts = 0;
xit('Should load AceEditor scripts when needed', () => {
@@ -52,7 +56,7 @@ describe('AdhocFilters', () => {
});
xit('Set simple adhoc filter', () => {
cy.get('[aria-label="Comparator option"] .Select__control').click();
cy.get('[data-test=adhoc-filter-simple-value] .Select__control').click();
cy.get('[data-test=adhoc-filter-simple-value] input[type=text]')
.focus()
.type('Jack{enter}', { delay: 20 });

View File

@@ -42,12 +42,8 @@ describe('AdhocMetrics', () => {
cy.get('[data-test="AdhocMetricEditTitle#trigger"]').click();
cy.get('[data-test="AdhocMetricEditTitle#input"]').type(metricName);
cy.get('input[aria-label="Select column"]')
.click()
.type('num_girls{enter}');
cy.get('input[aria-label="Select aggregate options"]')
.click()
.type('sum{enter}');
cy.get('[name="select-column"]').click().type('num_girls{enter}');
cy.get('[name="select-aggregate"]').click().type('sum{enter}');
cy.get('[data-test="AdhocMetricEdit#save"]').contains('Save').click();

View File

@@ -29,13 +29,13 @@ describe('Advanced analytics', () => {
cy.get('.ant-collapse-header').contains('Advanced Analytics').click();
cy.get('[data-test=time_compare]').find('.ant-select').click();
cy.get('[data-test=time_compare]').find('.Select__control').click();
cy.get('[data-test=time_compare]')
.find('input[type=search]')
.find('input[type=text]')
.type('28 days{enter}');
cy.get('[data-test=time_compare]')
.find('input[type=search]')
.find('input[type=text]')
.type('1 year{enter}');
cy.get('button[data-test="run-query-button"]').click();
@@ -48,10 +48,10 @@ describe('Advanced analytics', () => {
cy.get('.ant-collapse-header').contains('Advanced Analytics').click();
cy.get('[data-test=time_compare]')
.find('.ant-select-selector')
.find('.Select__multi-value__label')
.contains('28 days');
cy.get('[data-test=time_compare]')
.find('.ant-select-selector')
.find('.Select__multi-value__label')
.contains('1 year');
});
});

View File

@@ -105,6 +105,9 @@ describe('VizType control', () => {
cy.get('[role="button"]').contains('Line Chart').click();
cy.get('button').contains('Select').click();
// should load mathjs for line chart
cy.get('script[src*="mathjs"]').should('have.length', 1);
cy.get('button[data-test="run-query-button"]').click();
cy.verifySliceSuccess({
waitAlias: '@lineChartData',
@@ -235,8 +238,8 @@ describe('Groupby control', () => {
cy.verifySliceSuccess({ waitAlias: '@chartData' });
cy.get('[data-test=groupby]').within(() => {
cy.get('.ant-select').click();
cy.get('input[type=search]').type('state{enter}');
cy.get('.Select__control').click();
cy.get('input[type=text]').type('state{enter}');
});
cy.get('button[data-test="run-query-button"]').click();
cy.verifySliceSuccess({ waitAlias: '@chartData', chartSelector: 'svg' });

View File

@@ -126,12 +126,8 @@ describe('Test explore links', () => {
cy.get('[data-test="new-chart-name"]').click().clear().type(newChartName);
// Add a new option using the "CreatableSelect" feature
cy.get('[data-test="save-chart-modal-select-dashboard-form"]')
.find('input[aria-label="Select a dashboard"]')
.type(`${dashboardTitle}`, { force: true });
cy.get(`.ant-select-item[label="${dashboardTitle}"]`).click({
force: true,
});
.find('#dashboard-creatable-select')
.type(`${dashboardTitle}{enter}{enter}`);
cy.get('[data-test="btn-modal-save"]').click();
cy.verifySliceSuccess({ waitAlias: '@chartData' });
@@ -157,12 +153,8 @@ describe('Test explore links', () => {
// This time around, typing the same dashboard name
// will select the existing one
cy.get('[data-test="save-chart-modal-select-dashboard-form"]')
.find('input[aria-label="Select a dashboard"]')
.type(`${dashboardTitle}{enter}`, { force: true });
cy.get(`.ant-select-item[label="${dashboardTitle}"]`).click({
force: true,
});
.find('#dashboard-creatable-select')
.type(`${dashboardTitle}{enter}{enter}`);
cy.get('[data-test="btn-modal-save"]').click();
cy.verifySliceSuccess({ waitAlias: '@chartData' });

View File

@@ -32,6 +32,14 @@ describe('Visualization > Line', () => {
cy.get('.ant-alert-warning').contains(`Metrics: cannot be empty`);
});
it('should preload mathjs', () => {
cy.get('script[src*="mathjs"]').should('have.length', 1);
cy.contains('Add annotation layer').scrollIntoView().click();
// should not load additional mathjs
cy.get('script[src*="mathjs"]').should('have.length', 1);
cy.contains('Layer configuration');
});
it('should not show validator error when metric added', () => {
const formData = { ...LINE_CHART_DEFAULTS, metrics: [] };
cy.visitChartByParams(JSON.stringify(formData));
@@ -45,10 +53,8 @@ describe('Visualization > Line', () => {
// Title edit for saved metrics is disabled - switch to Simple
cy.get('[id="adhoc-metric-edit-tabs-tab-SIMPLE"]').click();
cy.get('input[aria-label="Select column"]').click().type('num{enter}');
cy.get('input[aria-label="Select aggregate options"]')
.click()
.type('sum{enter}');
cy.get('[name="select-column"]').click().type('num{enter}');
cy.get('[name="select-aggregate"]').click().type('sum{enter}');
cy.get('[data-test="AdhocMetricEdit#save"]').contains('Save').click();
cy.get('.text-danger').should('not.exist');
@@ -79,6 +85,7 @@ describe('Visualization > Line', () => {
const formData = { ...LINE_CHART_DEFAULTS, metrics: [NUM_METRIC] };
cy.visitChartByParams(JSON.stringify(formData));
cy.verifySliceSuccess({ waitAlias: '@getJson', chartSelector: 'svg' });
cy.get('script[src*="mathjs"]').should('have.length', 1);
});
it('should work with groupby', () => {

View File

@@ -54,7 +54,7 @@ describe('Visualization > Table', () => {
granularity_sqla: undefined,
metrics: ['count'],
});
cy.get('[data-test=granularity_sqla] .column-option-label').contains('ds');
cy.get('input[name="select-granularity_sqla"]').should('have.value', 'ds');
});
it('Format non-numeric metrics correctly', () => {
@@ -62,7 +62,7 @@ describe('Visualization > Table', () => {
...VIZ_DEFAULTS,
include_time: true,
granularity_sqla: 'ds',
time_grain_sqla: 'P3M',
time_grain_sqla: 'P0.25Y',
metrics: [NUM_METRIC, MAX_DS, MAX_STATE],
});
// when format with smart_date, time column use format by granularity
@@ -77,7 +77,7 @@ describe('Visualization > Table', () => {
...VIZ_DEFAULTS,
include_time: true,
granularity_sqla: 'ds',
time_grain_sqla: 'P3M',
time_grain_sqla: 'P0.25Y',
table_timestamp_format: '%Y-%m-%d %H:%M',
metrics: [NUM_METRIC, MAX_DS, MAX_STATE],
});
@@ -111,7 +111,7 @@ describe('Visualization > Table', () => {
...VIZ_DEFAULTS,
include_time: true,
granularity_sqla: 'ds',
time_grain_sqla: 'P3M',
time_grain_sqla: 'P0.25Y',
metrics: [NUM_METRIC, MAX_DS],
groupby: ['name'],
});

File diff suppressed because it is too large Load Diff

View File

@@ -7,18 +7,18 @@
"cypress-run-chrome": "cypress run --browser chrome --headless",
"cypress-debug": "cypress open --config watchForFileChanges=true"
},
"author": "Apache",
"author": "Apcahe",
"license": "Apache-2.0",
"dependencies": {
"@cypress/code-coverage": "^3.9.11",
"@superset-ui/core": "^0.18.4",
"@cypress/code-coverage": "^3.9.2",
"@superset-ui/core": "^0.17.42",
"react-dom": "^16.13.0",
"rison": "^0.1.1",
"shortid": "^2.2.15"
},
"devDependencies": {
"cypress": "^6.3.0",
"eslint-plugin-cypress": "^2.12.1"
"eslint-plugin-cypress": "^2.11.2"
},
"nyc": {
"reporter": [

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB

View File

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

Before

Width:  |  Height:  |  Size: 459 KiB

After

Width:  |  Height:  |  Size: 459 KiB

View File

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Some files were not shown because too many files have changed in this diff Show More