Compare commits
439 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5045ff4d91 | ||
|
|
1e2b2f10f0 | ||
|
|
96c18b4272 | ||
|
|
8057582b02 | ||
|
|
70228ad3fb | ||
|
|
f4661d6924 | ||
|
|
398a01f7dc | ||
|
|
752062674b | ||
|
|
cda62508c4 | ||
|
|
2e0fe93269 | ||
|
|
4991272b9c | ||
|
|
ba6d5b9754 | ||
|
|
8b0ab83119 | ||
|
|
4c00bd4332 | ||
|
|
77c4f2cb11 | ||
|
|
3d8ce130ba | ||
|
|
9837feff19 | ||
|
|
9468bdf0c1 | ||
|
|
c42ff7972f | ||
|
|
46343a9dca | ||
|
|
9818bc5e7a | ||
|
|
733fc7494c | ||
|
|
361e510cae | ||
|
|
eb64f82c20 | ||
|
|
3aa554b422 | ||
|
|
ed45717d5f | ||
|
|
6f932f9ec1 | ||
|
|
b577773e30 | ||
|
|
dfd0ed395c | ||
|
|
cca78f1b6e | ||
|
|
b4f4f4cdfa | ||
|
|
5899ae163a | ||
|
|
9459d09ae7 | ||
|
|
0b8507fe77 | ||
|
|
c015e661a9 | ||
|
|
7d9f63eda7 | ||
|
|
30c6ec07ef | ||
|
|
680cdca14a | ||
|
|
8a24374f9f | ||
|
|
33826cd50f | ||
|
|
c4b57e6b3e | ||
|
|
7db1caa2ad | ||
|
|
687676cb09 | ||
|
|
2eaf5c854e | ||
|
|
09b853c831 | ||
|
|
5f34ae2cf3 | ||
|
|
ea3d51efec | ||
|
|
55b3da661e | ||
|
|
b775193f9f | ||
|
|
7c966c52dc | ||
|
|
6da69a821f | ||
|
|
03481fe28d | ||
|
|
f467a7ca57 | ||
|
|
35d8a40634 | ||
|
|
5d43a5926c | ||
|
|
52ac5ecdbb | ||
|
|
e80c8ea980 | ||
|
|
43019a1b9d | ||
|
|
3f869aded2 | ||
|
|
f3bde45e5c | ||
|
|
cf4e129f5d | ||
|
|
23313fdb1f | ||
|
|
d90bfa65ef | ||
|
|
4e3fa1a141 | ||
|
|
35dda573cf | ||
|
|
5bfa6e96cd | ||
|
|
81da0fb466 | ||
|
|
c03771dc6d | ||
|
|
ed98027adc | ||
|
|
43e27b1137 | ||
|
|
bd5d787257 | ||
|
|
f56a3d8b1a | ||
|
|
3d77daaf68 | ||
|
|
19d2fef490 | ||
|
|
4d33f7b7b6 | ||
|
|
ddb35a3633 | ||
|
|
8755911765 | ||
|
|
012f6ac206 | ||
|
|
b2b3cd73fd | ||
|
|
6ed84f2d35 | ||
|
|
a6a3cedf6e | ||
|
|
083ff12864 | ||
|
|
739d8418a7 | ||
|
|
3f0756f637 | ||
|
|
1ab36c94f3 | ||
|
|
028f6c0d3f | ||
|
|
6d1fbb0668 | ||
|
|
3dee22adfd | ||
|
|
387ac2b6d3 | ||
|
|
ace9c78684 | ||
|
|
c05c6b3db4 | ||
|
|
0d0c759cfe | ||
|
|
f0060a63c0 | ||
|
|
6225c9a4a3 | ||
|
|
3f6a24fe1a | ||
|
|
420eff42b8 | ||
|
|
a07c9d591b | ||
|
|
90f711f45c | ||
|
|
87baac7650 | ||
|
|
87290ddcc8 | ||
|
|
c5d23fbcc7 | ||
|
|
7f330c9692 | ||
|
|
c8db435730 | ||
|
|
1a38ec6c43 | ||
|
|
3d520f2cc9 | ||
|
|
ae26967c4e | ||
|
|
05632b9804 | ||
|
|
94282b7ecd | ||
|
|
77e7d162d2 | ||
|
|
331de0c4ae | ||
|
|
904c506591 | ||
|
|
4da4fe4136 | ||
|
|
3272d1c086 | ||
|
|
3f784cc1c7 | ||
|
|
3d8cc15cba | ||
|
|
e3b14fe170 | ||
|
|
0ea83c5a00 | ||
|
|
aa747219ad | ||
|
|
b35645c3f4 | ||
|
|
9ac55d9afa | ||
|
|
27a40d2a67 | ||
|
|
6daf37bf40 | ||
|
|
d3f6145aba | ||
|
|
667b88c800 | ||
|
|
271ec6ec75 | ||
|
|
ab9f8cb2ea | ||
|
|
e40ff3ada6 | ||
|
|
913df18075 | ||
|
|
8ad03c4f25 | ||
|
|
0f16177bde | ||
|
|
f703c12ae8 | ||
|
|
bbe7aa3fc3 | ||
|
|
100760c464 | ||
|
|
0a8d0c6e7f | ||
|
|
42fa54881a | ||
|
|
ef95458547 | ||
|
|
c520eb79b0 | ||
|
|
a3413197de | ||
|
|
04f7ecad1c | ||
|
|
55e2872dbf | ||
|
|
1ff682f3a9 | ||
|
|
0d064f4451 | ||
|
|
c933250dad | ||
|
|
76f0408932 | ||
|
|
6921d94861 | ||
|
|
4086bedb68 | ||
|
|
84f7614e97 | ||
|
|
997320ac1a | ||
|
|
93fa478507 | ||
|
|
a198dbb19b | ||
|
|
63aadd3fe4 | ||
|
|
4af5ae08f9 | ||
|
|
5cb49d2de0 | ||
|
|
77ae2e1826 | ||
|
|
99d15b25b0 | ||
|
|
486e0d412c | ||
|
|
9b17e86b44 | ||
|
|
b6d78bf4f2 | ||
|
|
596e1cdf9b | ||
|
|
1d5100daa2 | ||
|
|
a74352644e | ||
|
|
48a61bacc5 | ||
|
|
493e804320 | ||
|
|
d375538671 | ||
|
|
f032cc254c | ||
|
|
a8d5342953 | ||
|
|
2a25e2d7ca | ||
|
|
b92358b5b8 | ||
|
|
985aa06439 | ||
|
|
67b13308ca | ||
|
|
7586e479a9 | ||
|
|
cc1c6c1bb6 | ||
|
|
a4f60010a1 | ||
|
|
986ed684ac | ||
|
|
4e3d4f6daf | ||
|
|
633f29f3e9 | ||
|
|
a839649e5c | ||
|
|
836b5e2c86 | ||
|
|
21f98ddc21 | ||
|
|
092ef5bdfc | ||
|
|
86290cc0e5 | ||
|
|
00ca21e016 | ||
|
|
88c09c2138 | ||
|
|
fb4650a6eb | ||
|
|
adc3d24c21 | ||
|
|
b0ac5d1625 | ||
|
|
7f804d62d1 | ||
|
|
540277ebb1 | ||
|
|
9f5f6794ff | ||
|
|
1d890f8913 | ||
|
|
fecd4124fa | ||
|
|
9e00e4e8cc | ||
|
|
c99cacbdd2 | ||
|
|
5ac8ac0e6c | ||
|
|
ad60c0c4ad | ||
|
|
d984c104cc | ||
|
|
376c685838 | ||
|
|
1669947bcd | ||
|
|
c6ac10716a | ||
|
|
b0b996582c | ||
|
|
29b635a0a1 | ||
|
|
83581b126d | ||
|
|
f2bc139e35 | ||
|
|
1cc726364a | ||
|
|
668ae23f28 | ||
|
|
51acadad74 | ||
|
|
1429d9dab6 | ||
|
|
4dc859f89e | ||
|
|
bb014b5131 | ||
|
|
4b70d46355 | ||
|
|
dad55a78f4 | ||
|
|
267b327a3c | ||
|
|
62637f275f | ||
|
|
3d0ebd5abc | ||
|
|
df7d9d5515 | ||
|
|
e9e6c5de8a | ||
|
|
d0f69f2e5c | ||
|
|
6465ee7dbd | ||
|
|
c66f278b42 | ||
|
|
788c0c3dae | ||
|
|
7e09b7241e | ||
|
|
9dfa33fedf | ||
|
|
420dd5b94a | ||
|
|
519baa6f00 | ||
|
|
37c2020035 | ||
|
|
9de2196b7f | ||
|
|
effcf3b50f | ||
|
|
7faa5c6aff | ||
|
|
3fe2e6ec73 | ||
|
|
7cbced8833 | ||
|
|
df5c0fbce9 | ||
|
|
e60b489867 | ||
|
|
be77ad2288 | ||
|
|
359383b578 | ||
|
|
5f8dff1341 | ||
|
|
9bb890ebed | ||
|
|
4e380db3fd | ||
|
|
a0db5367d2 | ||
|
|
070fdbeebc | ||
|
|
02798a3517 | ||
|
|
2e11b05d73 | ||
|
|
75a1b19174 | ||
|
|
e947f8a4c8 | ||
|
|
80c39daa85 | ||
|
|
e024f8c7d6 | ||
|
|
68c2a6d43a | ||
|
|
c5a5cf7db9 | ||
|
|
1f1e2dd29a | ||
|
|
f001c44727 | ||
|
|
d25b0967a1 | ||
|
|
ad8336a5b4 | ||
|
|
e2469162fa | ||
|
|
a616b8785e | ||
|
|
960d1e4d5d | ||
|
|
2199f65373 | ||
|
|
8aa24e50d9 | ||
|
|
90e2f09c67 | ||
|
|
1ffd73d03b | ||
|
|
62d8ab7f9c | ||
|
|
147637a02d | ||
|
|
8adc31d14c | ||
|
|
a413f796a6 | ||
|
|
ee2eccdb67 | ||
|
|
fd6456186d | ||
|
|
f422f1ea49 | ||
|
|
8ad495a572 | ||
|
|
ac1d779a30 | ||
|
|
577ede4b12 | ||
|
|
c66d6d83b9 | ||
|
|
1c71eda70f | ||
|
|
1badcaed45 | ||
|
|
ec087507e5 | ||
|
|
18be181946 | ||
|
|
db11c3e6c8 | ||
|
|
93c60e4021 | ||
|
|
6a2cec51c5 | ||
|
|
08b8aa277f | ||
|
|
78d8089b18 | ||
|
|
5e472980a6 | ||
|
|
631ad02a76 | ||
|
|
e71c6e60e4 | ||
|
|
5eded9fe1b | ||
|
|
c0e9006eb7 | ||
|
|
81241b6024 | ||
|
|
35864748f2 | ||
|
|
6a5568764e | ||
|
|
575e7af859 | ||
|
|
9a37ad1a1e | ||
|
|
f6637cac7d | ||
|
|
1fc9318594 | ||
|
|
c14364c616 | ||
|
|
486ef6b81f | ||
|
|
a6aad52e38 | ||
|
|
c768941f2f | ||
|
|
0cdc7675b4 | ||
|
|
bc4b6f0a6c | ||
|
|
7e4c940314 | ||
|
|
970d762779 | ||
|
|
3faf653e5f | ||
|
|
a9f502b67b | ||
|
|
c5081991fc | ||
|
|
649e509607 | ||
|
|
518c3c9ae0 | ||
|
|
adebc0997b | ||
|
|
13a2ee373c | ||
|
|
ea803c3d1c | ||
|
|
575ee24a99 | ||
|
|
50d896f1b7 | ||
|
|
37f09bd296 | ||
|
|
86f4e691d4 | ||
|
|
c5c28618a5 | ||
|
|
d75da748d5 | ||
|
|
42cd21e383 | ||
|
|
ec8d3b03e4 | ||
|
|
afb8bd5fe6 | ||
|
|
efe850b731 | ||
|
|
a547dcb73e | ||
|
|
2c595b09ea | ||
|
|
5f060a2227 | ||
|
|
482dffb1db | ||
|
|
9075e4206c | ||
|
|
4960b5ee2b | ||
|
|
7a284bb9e8 | ||
|
|
d5f63a74e4 | ||
|
|
b87e0b32ac | ||
|
|
ac8e54d909 | ||
|
|
3c0aefb61a | ||
|
|
4119bb9c1e | ||
|
|
8a36356f49 | ||
|
|
f581e0402b | ||
|
|
f5fbfef618 | ||
|
|
203c311ca3 | ||
|
|
5e75baf0cc | ||
|
|
9876c36f6e | ||
|
|
d13b081cfe | ||
|
|
2be84e78d2 | ||
|
|
be7065faf8 | ||
|
|
36bc7b0b80 | ||
|
|
0df15bf207 | ||
|
|
36abc51f90 | ||
|
|
b5c7ed9f18 | ||
|
|
7b724439b9 | ||
|
|
8e07dd28bc | ||
|
|
ee9a384758 | ||
|
|
542b864e61 | ||
|
|
0668eaad6a | ||
|
|
22231addec | ||
|
|
3709131089 | ||
|
|
d46dc9aa45 | ||
|
|
9b2dffeb1d | ||
|
|
24b43beff9 | ||
|
|
a5dbe6a14d | ||
|
|
f94695480a | ||
|
|
720e5b111a | ||
|
|
c09f6ed15b | ||
|
|
4ae88ce3b4 | ||
|
|
2611681de9 | ||
|
|
6cd15d54a0 | ||
|
|
d6f9c48aa1 | ||
|
|
517a678cd7 | ||
|
|
5d3d6b6eae | ||
|
|
cdcc161846 | ||
|
|
9d0dc561fc | ||
|
|
171514360e | ||
|
|
67c4c0116e | ||
|
|
a1e18ed110 | ||
|
|
2c5731aea3 | ||
|
|
16a9d219ed | ||
|
|
a16e290765 | ||
|
|
b61c34f7c9 | ||
|
|
7de54d016e | ||
|
|
5a8484185b | ||
|
|
c79de7abd7 | ||
|
|
b4555dfa4f | ||
|
|
ccfc95fbe6 | ||
|
|
6c304b83a9 | ||
|
|
98fc29cbbb | ||
|
|
4df3672baa | ||
|
|
3aefa6925b | ||
|
|
a30d884cfc | ||
|
|
9841c78967 | ||
|
|
a0c9b9d9c2 | ||
|
|
6df16c4b1f | ||
|
|
628169a171 | ||
|
|
2dc0bdda5d | ||
|
|
9f52c103ac | ||
|
|
a3102488a1 | ||
|
|
5e64d65a8b | ||
|
|
7b3fce7e81 | ||
|
|
3f86a54ac1 | ||
|
|
fd80ae34a3 | ||
|
|
f0e3b68cc2 | ||
|
|
63ace7b288 | ||
|
|
5488a8a948 | ||
|
|
6e1d16d956 | ||
|
|
a70248736f | ||
|
|
273ab3d257 | ||
|
|
07f33998ac | ||
|
|
bb1d8fe4ef | ||
|
|
79e8d77acc | ||
|
|
3712ee02fa | ||
|
|
606a7bf429 | ||
|
|
5ce38839e7 | ||
|
|
a51851308b | ||
|
|
b7cc89c6d4 | ||
|
|
578a9e9d53 | ||
|
|
6ac4f4ef2f | ||
|
|
2db1615c83 | ||
|
|
df50a47777 | ||
|
|
b07c80a839 | ||
|
|
ddb5005900 | ||
|
|
3bbcc30d69 | ||
|
|
85ae8e3477 | ||
|
|
85329c374e | ||
|
|
22d8d582f8 | ||
|
|
28c383af68 | ||
|
|
772da8de63 | ||
|
|
b80f018691 | ||
|
|
6edc1ee3bb | ||
|
|
e59f318ef9 | ||
|
|
423ff50768 | ||
|
|
2bfc1c29c5 | ||
|
|
e6292a89bb | ||
|
|
23072161e2 | ||
|
|
b72fd7b9f4 | ||
|
|
e6274e0764 | ||
|
|
af204ff449 | ||
|
|
1dbd1e9f02 | ||
|
|
a59d458e41 | ||
|
|
11a2d4dfdd | ||
|
|
7ef97a54e2 | ||
|
|
7effa44d54 | ||
|
|
4359650b7d | ||
|
|
7c95595b77 | ||
|
|
86cecaeec5 | ||
|
|
2c55cc6558 | ||
|
|
1917464d2b | ||
|
|
7332055ff6 | ||
|
|
490890de23 |
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
docker/**/*.sh text eol=lf
|
||||
6
.github/CODEOWNERS
vendored
@@ -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 @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
|
||||
.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
|
||||
|
||||
14
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -7,6 +7,13 @@ 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.
|
||||
@@ -19,17 +26,12 @@ 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`
|
||||
|
||||
7
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,3 +1,9 @@
|
||||
<!---
|
||||
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 -->
|
||||
|
||||
@@ -11,6 +17,7 @@
|
||||
<!--- 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
|
||||
|
||||
5
.github/workflows/bashlib.sh
vendored
@@ -55,7 +55,6 @@ npm-install() {
|
||||
cd "$GITHUB_WORKSPACE/superset-frontend"
|
||||
|
||||
# cache-restore npm
|
||||
|
||||
say "::group::Install npm packages"
|
||||
echo "npm: $(npm --version)"
|
||||
echo "node: $(node --version)"
|
||||
@@ -69,7 +68,7 @@ build-assets() {
|
||||
cd "$GITHUB_WORKSPACE/superset-frontend"
|
||||
|
||||
say "::group::Build static assets"
|
||||
npm run build -- --no-progress
|
||||
npm run build
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
@@ -81,7 +80,7 @@ build-instrumented-assets() {
|
||||
if [[ -f "$ASSETS_MANIFEST" ]]; then
|
||||
echo 'Skip frontend build because instrumented static assets already exist.'
|
||||
else
|
||||
npm run build-instrumented -- --no-progress
|
||||
npm run build-instrumented
|
||||
cache-save instrumented-assets
|
||||
fi
|
||||
say "::endgroup::"
|
||||
|
||||
24
.github/workflows/superset-e2e.yml
vendored
@@ -67,13 +67,12 @@ jobs:
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: "3.7"
|
||||
python-version: "3.8"
|
||||
- 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
|
||||
@@ -85,32 +84,31 @@ 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
|
||||
run: testdata
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '16'
|
||||
- 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
|
||||
|
||||
7
.github/workflows/superset-frontend.yml
vendored
@@ -18,6 +18,8 @@ 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:
|
||||
@@ -25,6 +27,11 @@ 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
|
||||
|
||||
2
.github/workflows/superset-helm-lint.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.7
|
||||
python-version: 3.8
|
||||
|
||||
- name: Set up chart-testing
|
||||
uses: ./.github/actions/chart-testing-action
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.7]
|
||||
python-version: [3.8]
|
||||
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.7, 3.8]
|
||||
python-version: [3.8, 3.9]
|
||||
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.7]
|
||||
python-version: [3.8]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
|
||||
7
.github/workflows/superset-python-misc.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.7]
|
||||
python-version: [3.8]
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
@@ -29,6 +29,7 @@ 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 }}
|
||||
@@ -50,7 +51,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.7]
|
||||
python-version: [3.8]
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
@@ -76,7 +77,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.7]
|
||||
python-version: [3.8]
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.7,3.8]
|
||||
python-version: [3.8, 3.9]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
steps:
|
||||
|
||||
6
.github/workflows/superset-translations.yml
vendored
@@ -17,6 +17,10 @@ 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:
|
||||
@@ -31,7 +35,7 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [3.7]
|
||||
python-version: [3.8]
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
|
||||
@@ -24,9 +24,10 @@ repos:
|
||||
hooks:
|
||||
- id: isort
|
||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||
rev: v0.790
|
||||
rev: v0.910
|
||||
hooks:
|
||||
- id: mypy
|
||||
additional_dependencies: [types-all, types-redis]
|
||||
- repo: https://github.com/peterdemin/pip-compile-multi
|
||||
rev: v2.4.1
|
||||
hooks:
|
||||
|
||||
17
.pylintrc
@@ -70,7 +70,8 @@ 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=
|
||||
enable=
|
||||
useless-suppression,
|
||||
|
||||
# Disable the message, report, category or checker with the given id(s). You
|
||||
# can either give multiple identifiers separated by comma (,) or put this
|
||||
@@ -83,14 +84,10 @@ confidence=
|
||||
# --disable=W"
|
||||
disable=
|
||||
missing-docstring,
|
||||
too-many-lines,
|
||||
ungrouped-imports,
|
||||
import-outside-toplevel,
|
||||
raise-missing-from,
|
||||
super-with-arguments,
|
||||
too-few-public-methods,
|
||||
too-many-locals,
|
||||
|
||||
duplicate-code,
|
||||
unspecified-encoding,
|
||||
# re-enable once this no longer raises false positives
|
||||
too-many-instance-attributes
|
||||
|
||||
[REPORTS]
|
||||
|
||||
@@ -123,7 +120,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
|
||||
good-names=_,df,ex,f,i,id,j,k,l,o,pk,Run,ts,v,x,y
|
||||
|
||||
# Bad variable names which should always be refused, separated by a comma
|
||||
bad-names=fd,foo,bar,baz,toto,tutu,tata
|
||||
|
||||
9217
CHANGELOG.md
@@ -106,7 +106,7 @@ This statement thanks the following, on which it draws for content and inspirati
|
||||
|
||||
# Slack Community Guidelines
|
||||
|
||||
If you decide to join the [Community Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ), please adhere to the following rules:
|
||||
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:
|
||||
|
||||
**1. Treat everyone in the community with respect.**
|
||||
|
||||
|
||||
@@ -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/images` directory.
|
||||
images (and any other static assets) to the `superset-frontend/src/assets/images` directory.
|
||||
When the docs are deployed to https://superset.apache.org/, images
|
||||
are copied from there to the `_static/images` directory, just like they're referenced
|
||||
in the docs.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
### 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,7 +522,12 @@ Frontend assets (TypeScript, JavaScript, CSS, and images) must be compiled in or
|
||||
|
||||
##### nvm and node
|
||||
|
||||
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:
|
||||
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:
|
||||
|
||||
```bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash
|
||||
@@ -540,12 +545,6 @@ 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:
|
||||
@@ -754,15 +753,21 @@ 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 tests. The [readme can be
|
||||
There is also a utility script included in the Superset codebase to run python integration tests. The [readme can be
|
||||
found here](https://github.com/apache/superset/tree/master/scripts/tests)
|
||||
|
||||
To run all tests for example, run this script from the root directory:
|
||||
To run all integration 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:
|
||||
@@ -807,7 +812,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.js
|
||||
npm run cypress-run-chrome -- --spec cypress/integration/explore/link.test.ts
|
||||
|
||||
# run specific file with video capture
|
||||
npm run cypress-run-chrome -- --spec cypress/integration/dashboard/index.test.js --config video=true
|
||||
|
||||
10
Dockerfile
@@ -18,7 +18,7 @@
|
||||
######################################################################
|
||||
# PY stage that simply does a pip install on our requirements
|
||||
######################################################################
|
||||
ARG PY_VER=3.7.9
|
||||
ARG PY_VER=3.8.12
|
||||
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:14 AS superset-node
|
||||
FROM node:16 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 is BY FAR the most expensive step (thanks Terser!)
|
||||
# This seems to be the most expensive step
|
||||
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.7.9
|
||||
ARG PY_VER=3.8.12
|
||||
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.7/site-packages/ /usr/local/lib/python3.7/site-packages/
|
||||
COPY --from=superset-py /usr/local/lib/python3.8/site-packages/ /usr/local/lib/python3.8/site-packages/
|
||||
# Copying site-packages doesn't move the CLIs, so let's copy them one by one
|
||||
COPY --from=superset-py /usr/local/bin/gunicorn /usr/local/bin/celery /usr/local/bin/flask /usr/bin/
|
||||
COPY --from=superset-node /app/superset/static/assets /app/superset/static/assets
|
||||
|
||||
25
Makefile
@@ -15,8 +15,8 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
# Python version installed; we need 3.8 or 3.7
|
||||
PYTHON=`command -v python3.8 || command -v python3.7`
|
||||
# Python version installed; we need 3.7-3.9
|
||||
PYTHON=`command -v python3.9 || command -v python3.8 || command -v python3.7`
|
||||
|
||||
.PHONY: install superset venv pre-commit
|
||||
|
||||
@@ -58,14 +58,17 @@ update-py:
|
||||
|
||||
update-js:
|
||||
# Install js packages
|
||||
cd superset-frontend; npm install
|
||||
cd superset-frontend; npm ci
|
||||
|
||||
venv:
|
||||
# Create a virtual environment and activate it (recommended)
|
||||
if ! [ -x "${PYTHON}" ]; then echo "You need Python 3.7 or 3.8 installed"; exit 1; fi
|
||||
if ! [ -x "${PYTHON}" ]; then echo "You need Python 3.7, 3.8 or 3.9 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
|
||||
@@ -81,3 +84,17 @@ 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
|
||||
|
||||
62
README.md
@@ -25,7 +25,7 @@ under the License.
|
||||
[](https://badge.fury.io/py/apache-superset)
|
||||
[](https://codecov.io/github/apache/superset)
|
||||
[](https://pypi.python.org/pypi/apache-superset)
|
||||
[](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
|
||||
[](https://join.slack.com/t/apache-superset/shared_invite/zt-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw)
|
||||
[](https://superset.apache.org)
|
||||
[](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/images/screenshots/gallery.jpg"/></a></kbd><br/>
|
||||
<kbd><a href="https://superset.apache.org/gallery"><img title="Gallery" src="superset-frontend/src/assets/images/screenshots/gallery.jpg"/></a></kbd><br/>
|
||||
|
||||
**View Dashboards**
|
||||
|
||||
<kbd><img title="View Dashboards" src="superset-frontend/images/screenshots/slack_dash.jpg"/></kbd><br/>
|
||||
<kbd><img title="View Dashboards" src="superset-frontend/src/assets/images/screenshots/slack_dash.jpg"/></kbd><br/>
|
||||
|
||||
**Slice & dice your data**
|
||||
|
||||
<kbd><img title="Slice & dice your data" src="superset-frontend/images/screenshots/explore.jpg"/></kbd><br/>
|
||||
<kbd><img title="Slice & dice your data" src="superset-frontend/src/assets/images/screenshots/explore.jpg"/></kbd><br/>
|
||||
|
||||
**Query and visualize your data with SQL Lab**
|
||||
|
||||
<kbd><img title="SQL Lab" src="superset-frontend/images/screenshots/sql_lab.jpg"/></kbd><br/>
|
||||
<kbd><img title="SQL Lab" src="superset-frontend/src/assets/images/screenshots/sql_lab.jpg"/></kbd><br/>
|
||||
|
||||
**Visualize geospatial data with deck.gl**
|
||||
|
||||
<kbd><img title="Geospatial" src="superset-frontend/images/screenshots/geospatial_dash.jpg"/></kbd><br/>
|
||||
<kbd><img title="Geospatial" src="superset-frontend/src/assets/images/screenshots/geospatial_dash.jpg"/></kbd><br/>
|
||||
|
||||
**Choose from a wide array of visualizations**
|
||||
|
||||
<kbd><img title="Visualizations" src="superset-frontend/images/screenshots/explore_visualizations.jpg"/></kbd><br/>
|
||||
<kbd><img title="Visualizations" src="superset-frontend/src/assets/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/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"/>
|
||||
<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"/>
|
||||
</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-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
|
||||
- [Join our community's Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw)
|
||||
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)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
FROM python:3.7-buster
|
||||
FROM python:3.8-buster
|
||||
|
||||
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
FROM python:3.7-buster
|
||||
FROM python:3.8-buster
|
||||
|
||||
RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
FROM python:3.7-buster
|
||||
FROM python:3.8-buster
|
||||
ARG VERSION
|
||||
|
||||
RUN git clone --depth 1 --branch ${VERSION} https://github.com/apache/superset.git /superset
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
FROM python:3.7-buster
|
||||
FROM python:3.8-buster
|
||||
|
||||
RUN apt-get update -y
|
||||
RUN apt-get install -y jq
|
||||
|
||||
@@ -29,6 +29,8 @@ 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)
|
||||
|
||||
@@ -13,9 +13,6 @@
|
||||
# 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
|
||||
@@ -384,12 +381,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(
|
||||
writer = lib_csv.DictWriter( # type: ignore
|
||||
csv_file,
|
||||
delimiter=",",
|
||||
quotechar='"',
|
||||
quoting=lib_csv.QUOTE_ALL,
|
||||
fieldnames=field_names,
|
||||
fieldnames=field_names, # type: ignore
|
||||
)
|
||||
writer.writeheader()
|
||||
for log in logs:
|
||||
|
||||
73
RELEASING/release-notes-1-3/README.md
Normal file
@@ -0,0 +1,73 @@
|
||||
<!--
|
||||
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.
|
||||
|
||||

|
||||
|
||||
Native-filters can also be set to load collapsed, which also improves connected thumbnail and alerts/reports functionality.
|
||||
|
||||

|
||||
|
||||
For charts, we've added a new funnel chart.
|
||||
|
||||

|
||||
|
||||
Users can also now use Jinja templating in calculated columns and SQL metrics.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
# 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.
|
||||
BIN
RELEASING/release-notes-1-3/media/dashboard_native_filters_1.jpg
Normal file
|
After Width: | Height: | Size: 362 KiB |
BIN
RELEASING/release-notes-1-3/media/export_full_csv.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
RELEASING/release-notes-1-3/media/funnel_chart.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
RELEASING/release-notes-1-3/media/jinja_templating.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
RELEASING/release-notes-1-3/media/native_filters_collapsed.png
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
RELEASING/release-notes-1-3/media/view_query_dashboard.png
Normal file
|
After Width: | Height: | Size: 283 KiB |
@@ -61,6 +61,7 @@ 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]
|
||||
|
||||
@@ -96,6 +97,7 @@ 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]
|
||||
@@ -104,7 +106,6 @@ 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]
|
||||
@@ -129,6 +130,7 @@ 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/)
|
||||
|
||||
96
UPDATING.md
@@ -22,33 +22,55 @@ under the License.
|
||||
This file documents any backwards-incompatible changes in Superset and
|
||||
assists people when migrating to a new version.
|
||||
|
||||
## 1.3.1
|
||||
## Next
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- [16711](https://github.com/apache/incubator-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
|
||||
|
||||
## 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/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.
|
||||
- [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.
|
||||
|
||||
### 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
|
||||
|
||||
@@ -83,19 +105,21 @@ drops a uniqueness criterion (which may or may not have existed) to the tables t
|
||||
## 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.
|
||||
|
||||
@@ -110,42 +134,44 @@ drops a uniqueness criterion (which may or may not have existed) to the tables t
|
||||
- [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
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ services:
|
||||
- redis:/data
|
||||
|
||||
db:
|
||||
env_file: docker/.env
|
||||
env_file: docker/.env-non-dev
|
||||
image: postgres:10
|
||||
container_name: superset_db
|
||||
restart: unless-stopped
|
||||
|
||||
@@ -102,7 +102,7 @@ services:
|
||||
CYPRESS_CONFIG: "${CYPRESS_CONFIG}"
|
||||
|
||||
superset-node:
|
||||
image: node:14
|
||||
image: node:16
|
||||
container_name: superset_node
|
||||
command: ["/app/docker/docker-frontend.sh"]
|
||||
env_file: docker/.env
|
||||
|
||||
@@ -1465,7 +1465,7 @@ install from pip: ::
|
||||
|
||||
and run via: ::
|
||||
|
||||
celery flower --app=superset.tasks.celery_app:app
|
||||
celery --app=superset.tasks.celery_app:app flower
|
||||
|
||||
Building from source
|
||||
---------------------
|
||||
|
||||
@@ -26,7 +26,7 @@ import { pmc } from '../resources/data';
|
||||
|
||||
const links = [
|
||||
[
|
||||
'https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ',
|
||||
'https://join.slack.com/t/apache-superset/shared_invite/zt-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw',
|
||||
'Slack',
|
||||
'interact with other Superset users and community members',
|
||||
],
|
||||
|
||||
68
docs/src/pages/docs/Connecting to Databases/databricks.mdx
Normal file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
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"}}
|
||||
```
|
||||
24
docs/src/pages/docs/Connecting to Databases/firebolt.mdx
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
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
|
||||
```
|
||||
@@ -42,12 +42,13 @@ 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/postgresql)|```pip install psycopg2```|```postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|
||||
|[PostgreSQL](/docs/databases/postgres)|```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}```|
|
||||
@@ -69,5 +70,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-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
|
||||
[Superset community Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw)
|
||||
are great places to get help with connecting to databases in Superset.
|
||||
|
||||
@@ -8,8 +8,8 @@ version: 1
|
||||
|
||||
## Postgres
|
||||
|
||||
Note that the Postgres connector library [psycopg2](https://www.psycopg.org/docs/) comes out of the
|
||||
box with Superset.
|
||||
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.
|
||||
|
||||
Postgres sample connection parameters:
|
||||
|
||||
|
||||
@@ -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 **Vehicle Sales** table from the **examples** database.
|
||||
we register the **cleaned_sales_data** table from the **examples** database.
|
||||
|
||||
<img src="/images/tutorial_09_add_new_table.png" />
|
||||
|
||||
|
||||
@@ -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-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
|
||||
- [Apache Superset Slack community](https://join.slack.com/t/apache-superset/shared_invite/zt-uxbh5g36-AISUtHbzOXcu0BIj7kgUaw)
|
||||
- [Github issues and PR's](https://github.com/apache/superset/issues)
|
||||
|
||||
If you're interested in contributing, we recommend reading the Community Contribution Guide
|
||||
|
||||
@@ -183,10 +183,10 @@ You can read more about customizing Superset using the configuration file
|
||||
|
||||
Table schemas evolve, and Superset needs to reflect that. It’s 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 **Menu -> Sources -> Tables**, click the edit icon next to the table
|
||||
who’s 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.
|
||||
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.
|
||||
|
||||
### What database engine can I use as a backend for Superset?
|
||||
|
||||
@@ -212,12 +212,6 @@ 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
|
||||
|
||||
@@ -114,5 +114,5 @@ pip install flower
|
||||
You can run flower using:
|
||||
|
||||
```
|
||||
celery flower --app=superset.tasks.celery_app:app
|
||||
celery --app=superset.tasks.celery_app:app flower
|
||||
```
|
||||
|
||||
@@ -201,6 +201,29 @@ 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
|
||||
@@ -218,7 +241,7 @@ FEATURE_FLAGS = {
|
||||
}
|
||||
```
|
||||
|
||||
A current list of feature flags can be found in `RESOURCES/FEATURE_FLAGS.md`
|
||||
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).
|
||||
|
||||
### SIP 15
|
||||
|
||||
|
||||
@@ -36,6 +36,18 @@ 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
|
||||
@@ -53,7 +65,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 (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)).
|
||||
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)).
|
||||
|
||||
Let's also make sure we have the latest version of `pip` and `setuptools`:
|
||||
|
||||
|
||||
@@ -10,10 +10,34 @@ version: 1
|
||||
|
||||
### Jinja Templates
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
```python
|
||||
JINJA_CONTEXT_ADDONS = {
|
||||
@@ -174,7 +198,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 speed purposes
|
||||
- you want to have the ability for filter inside the main query for performance purposes
|
||||
|
||||
Here's a concrete example:
|
||||
|
||||
@@ -186,11 +210,6 @@ 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
|
||||
|
||||
@@ -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 that altering the
|
||||
Even though **Admin** users have the ability, we don't recommend 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).
|
||||
|
||||
@@ -730,13 +730,13 @@
|
||||
"PT5M",
|
||||
"PT10M",
|
||||
"PT15M",
|
||||
"PT0.5H",
|
||||
"PT30M",
|
||||
"PT1H",
|
||||
"PT6H",
|
||||
"P1D",
|
||||
"P1W",
|
||||
"P1M",
|
||||
"P0.25Y",
|
||||
"P3M",
|
||||
"P1Y",
|
||||
"1969-12-28T00:00:00Z/P1W",
|
||||
"1969-12-29T00:00:00Z/P1W",
|
||||
@@ -998,13 +998,13 @@
|
||||
"PT5M",
|
||||
"PT10M",
|
||||
"PT15M",
|
||||
"PT0.5H",
|
||||
"PT30M",
|
||||
"PT1H",
|
||||
"PT6H",
|
||||
"P1D",
|
||||
"P1W",
|
||||
"P1M",
|
||||
"P0.25Y",
|
||||
"P3M",
|
||||
"P1Y",
|
||||
"1969-12-28T00:00:00Z/P1W",
|
||||
"1969-12-29T00:00:00Z/P1W",
|
||||
@@ -2722,7 +2722,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"impersonate_user": {
|
||||
"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.",
|
||||
"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.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"parameters": {
|
||||
@@ -2816,7 +2816,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"impersonate_user": {
|
||||
"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.",
|
||||
"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.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"parameters": {
|
||||
@@ -2866,7 +2866,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"impersonate_user": {
|
||||
"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.",
|
||||
"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.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"parameters": {
|
||||
@@ -2914,7 +2914,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"impersonate_user": {
|
||||
"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.",
|
||||
"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.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"parameters": {
|
||||
@@ -9984,43 +9984,45 @@
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"items": {
|
||||
"properties": {
|
||||
"available_drivers": {
|
||||
"description": "Installed drivers for the engine",
|
||||
"items": {
|
||||
"databases": {
|
||||
"items": {
|
||||
"properties": {
|
||||
"available_drivers": {
|
||||
"description": "Installed drivers for the engine",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"default_driver": {
|
||||
"description": "Default driver for the engine",
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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": "object"
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"type": "array"
|
||||
"type": "array"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -22,7 +22,7 @@ maintainers:
|
||||
- name: craig-rueda
|
||||
email: craig@craigrueda.com
|
||||
url: https://github.com/craig-rueda
|
||||
version: 0.3.5
|
||||
version: 0.3.10
|
||||
dependencies:
|
||||
- name: postgresql
|
||||
version: 10.2.0
|
||||
|
||||
@@ -61,6 +61,9 @@ 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 }}"
|
||||
@@ -69,12 +72,13 @@ 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 }}
|
||||
{{- end }}
|
||||
{{- if .Values.extraEnvRaw }}
|
||||
{{- toYaml .Values.extraEnvRaw | nindent 12 }}
|
||||
{{- end }}
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: {{ tpl .Values.envFromSecret . | quote }}
|
||||
@@ -86,6 +90,9 @@ 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 }}
|
||||
@@ -108,4 +115,7 @@ spec:
|
||||
- name: superset-config
|
||||
secret:
|
||||
secretName: {{ tpl .Values.configFromSecret . }}
|
||||
{{- with .Values.extraVolumes }}
|
||||
{{- tpl (toYaml .) $ | nindent 8 -}}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
@@ -62,6 +62,9 @@ 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 }}"
|
||||
@@ -70,12 +73,13 @@ 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 }}
|
||||
{{- end }}
|
||||
{{- if .Values.extraEnvRaw }}
|
||||
{{- toYaml .Values.extraEnvRaw | nindent 12 }}
|
||||
{{- end }}
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: {{ tpl .Values.envFromSecret . | quote }}
|
||||
@@ -87,6 +91,9 @@ 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 }}
|
||||
@@ -109,3 +116,6 @@ spec:
|
||||
- name: superset-config
|
||||
secret:
|
||||
secretName: {{ tpl .Values.configFromSecret . }}
|
||||
{{- with .Values.extraVolumes }}
|
||||
{{- tpl (toYaml .) $ | nindent 8 -}}
|
||||
{{- end }}
|
||||
|
||||
@@ -65,6 +65,9 @@ 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 }}"
|
||||
@@ -73,12 +76,17 @@ 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 }}
|
||||
{{- end }}
|
||||
{{- range $key, $value := .Values.supersetNode.env }}
|
||||
- name: {{ $key | quote}}
|
||||
value: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- if .Values.extraEnvRaw }}
|
||||
{{- toYaml .Values.extraEnvRaw | nindent 12 }}
|
||||
{{- end }}
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: {{ tpl .Values.envFromSecret . | quote }}
|
||||
@@ -95,6 +103,9 @@ spec:
|
||||
mountPath: {{ .Values.extraConfigMountPath | quote }}
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- with .Values.extraVolumeMounts }}
|
||||
{{- tpl (toYaml .) $ | nindent 12 -}}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.service.port }}
|
||||
@@ -127,3 +138,6 @@ spec:
|
||||
configMap:
|
||||
name: {{ template "superset.fullname" . }}-extra-config
|
||||
{{- end }}
|
||||
{{- with .Values.extraVolumes }}
|
||||
{{- tpl (toYaml .) $ | nindent 8 -}}
|
||||
{{- end }}
|
||||
|
||||
@@ -36,12 +36,15 @@ spec:
|
||||
containers:
|
||||
- name: {{ template "superset.name" . }}-init-db
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
{{ if .Values.extraEnv }}
|
||||
{{- if or .Values.extraEnv .Values.extraEnvRaw }}
|
||||
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:
|
||||
@@ -60,6 +63,9 @@ 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 }}
|
||||
@@ -76,5 +82,8 @@ spec:
|
||||
configMap:
|
||||
name: {{ template "superset.fullname" . }}-extra-config
|
||||
{{- end }}
|
||||
{{- with .Values.extraVolumes }}
|
||||
{{- tpl (toYaml .) $ | nindent 8 -}}
|
||||
{{- end }}
|
||||
restartPolicy: Never
|
||||
{{- end }}
|
||||
|
||||
@@ -54,11 +54,21 @@ 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: {}
|
||||
@@ -82,6 +92,22 @@ 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: {}
|
||||
@@ -167,6 +193,15 @@ 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:
|
||||
@@ -182,6 +217,7 @@ 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
|
||||
@@ -276,6 +312,7 @@ 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..."
|
||||
|
||||
@@ -18,3 +18,8 @@
|
||||
-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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# SHA1:0862095245a068ae2fc00217da78331e1e7ae505
|
||||
# SHA1:fe363b0ea02d7589c2ba5a1cf936247a966a6d5e
|
||||
#
|
||||
# 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.2
|
||||
aiohttp==3.7.4.post0
|
||||
# via slackclient
|
||||
alembic==1.4.3
|
||||
alembic==1.6.5
|
||||
# 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==20.2.0
|
||||
attrs==21.2.0
|
||||
# via
|
||||
# aiohttp
|
||||
# jsonschema
|
||||
babel==2.8.0
|
||||
babel==2.9.1
|
||||
# via flask-babel
|
||||
backoff==1.10.0
|
||||
backoff==1.11.1
|
||||
# via apache-superset
|
||||
billiard==3.6.3.0
|
||||
billiard==3.6.4.0
|
||||
# via celery
|
||||
bleach==3.3.0
|
||||
bleach==3.3.1
|
||||
# via apache-superset
|
||||
brotli==1.0.9
|
||||
# via flask-compress
|
||||
@@ -35,10 +35,18 @@ cachelib==0.1.1
|
||||
# via apache-superset
|
||||
celery==4.4.7
|
||||
# via apache-superset
|
||||
cffi==1.14.3
|
||||
certifi==2021.5.30
|
||||
# via
|
||||
# -r requirements/base.in
|
||||
# requests
|
||||
cffi==1.14.6
|
||||
# via cryptography
|
||||
chardet==3.0.4
|
||||
chardet==4.0.0
|
||||
# via aiohttp
|
||||
charset-normalizer==2.0.4
|
||||
# via
|
||||
# -r requirements/base.in
|
||||
# requests
|
||||
click==7.1.2
|
||||
# via
|
||||
# apache-superset
|
||||
@@ -48,23 +56,23 @@ colorama==0.4.4
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
convertdate==2.3.0
|
||||
convertdate==2.3.2
|
||||
# via holidays
|
||||
cron-descriptor==1.2.24
|
||||
# via apache-superset
|
||||
croniter==0.3.36
|
||||
croniter==1.0.15
|
||||
# via apache-superset
|
||||
cryptography==3.3.2
|
||||
cryptography==3.4.7
|
||||
# via apache-superset
|
||||
defusedxml==0.6.0
|
||||
defusedxml==0.7.1
|
||||
# via python3-openid
|
||||
deprecation==2.1.0
|
||||
# via apache-superset
|
||||
dnspython==2.0.0
|
||||
dnspython==2.1.0
|
||||
# via email-validator
|
||||
email-validator==1.1.1
|
||||
email-validator==1.1.3
|
||||
# via flask-appbuilder
|
||||
flask==1.1.2
|
||||
flask==1.1.4
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
@@ -77,35 +85,35 @@ flask==1.1.2
|
||||
# flask-openid
|
||||
# flask-sqlalchemy
|
||||
# flask-wtf
|
||||
flask-appbuilder==3.3.0
|
||||
flask-appbuilder==3.3.4
|
||||
# via apache-superset
|
||||
flask-babel==1.0.0
|
||||
# via flask-appbuilder
|
||||
flask-caching==1.10.1
|
||||
# via apache-superset
|
||||
flask-compress==1.8.0
|
||||
flask-compress==1.10.1
|
||||
# via apache-superset
|
||||
flask-jwt-extended==3.24.1
|
||||
flask-jwt-extended==3.25.1
|
||||
# via flask-appbuilder
|
||||
flask-login==0.4.1
|
||||
# via flask-appbuilder
|
||||
flask-migrate==2.5.3
|
||||
flask-migrate==3.1.0
|
||||
# via apache-superset
|
||||
flask-openid==1.3.0
|
||||
# via flask-appbuilder
|
||||
flask-sqlalchemy==2.4.4
|
||||
flask-sqlalchemy==2.5.1
|
||||
# via
|
||||
# flask-appbuilder
|
||||
# flask-migrate
|
||||
flask-talisman==0.7.0
|
||||
flask-talisman==0.8.1
|
||||
# via apache-superset
|
||||
flask-wtf==0.14.3
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
geographiclib==1.50
|
||||
geographiclib==1.52
|
||||
# via geopy
|
||||
geopy==2.0.0
|
||||
geopy==2.2.0
|
||||
# via apache-superset
|
||||
graphlib-backport==1.0.3
|
||||
# via apache-superset
|
||||
@@ -113,11 +121,12 @@ gunicorn==20.0.4
|
||||
# via apache-superset
|
||||
holidays==0.10.3
|
||||
# via apache-superset
|
||||
humanize==3.1.0
|
||||
humanize==3.11.0
|
||||
# via apache-superset
|
||||
idna==2.10
|
||||
idna==3.2
|
||||
# via
|
||||
# email-validator
|
||||
# requests
|
||||
# yarl
|
||||
isodate==0.6.0
|
||||
# via apache-superset
|
||||
@@ -136,16 +145,16 @@ kombu==4.6.11
|
||||
# via celery
|
||||
korean-lunar-calendar==0.2.1
|
||||
# via holidays
|
||||
mako==1.1.3
|
||||
mako==1.1.4
|
||||
# via alembic
|
||||
markdown==3.3.3
|
||||
markdown==3.3.4
|
||||
# via apache-superset
|
||||
markupsafe==1.1.1
|
||||
markupsafe==2.0.1
|
||||
# via
|
||||
# jinja2
|
||||
# mako
|
||||
# wtforms
|
||||
marshmallow==3.9.0
|
||||
marshmallow==3.13.0
|
||||
# via
|
||||
# flask-appbuilder
|
||||
# marshmallow-enum
|
||||
@@ -154,23 +163,22 @@ marshmallow-enum==1.5.1
|
||||
# via flask-appbuilder
|
||||
marshmallow-sqlalchemy==0.23.1
|
||||
# via flask-appbuilder
|
||||
msgpack==1.0.0
|
||||
msgpack==1.0.2
|
||||
# via apache-superset
|
||||
multidict==5.0.0
|
||||
multidict==5.1.0
|
||||
# via
|
||||
# aiohttp
|
||||
# yarl
|
||||
natsort==7.0.1
|
||||
# via croniter
|
||||
numpy==1.19.4
|
||||
numpy==1.21.1
|
||||
# via
|
||||
# pandas
|
||||
# pyarrow
|
||||
packaging==20.4
|
||||
packaging==21.0
|
||||
# via
|
||||
# -r requirements/base.in
|
||||
# bleach
|
||||
# deprecation
|
||||
pandas==1.2.2
|
||||
pandas==1.2.5
|
||||
# via apache-superset
|
||||
parsedatetime==2.6
|
||||
# via apache-superset
|
||||
@@ -178,7 +186,7 @@ pgsanity==0.2.9
|
||||
# via apache-superset
|
||||
polyline==1.4.0
|
||||
# via apache-superset
|
||||
prison==0.1.3
|
||||
prison==0.2.1
|
||||
# via flask-appbuilder
|
||||
pyarrow==4.0.1
|
||||
# via apache-superset
|
||||
@@ -189,7 +197,7 @@ pyjwt==1.7.1
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
# flask-jwt-extended
|
||||
pymeeus==0.3.7
|
||||
pymeeus==0.5.11
|
||||
# via convertdate
|
||||
pyparsing==2.4.7
|
||||
# via
|
||||
@@ -199,7 +207,7 @@ pyrsistent==0.16.1
|
||||
# via
|
||||
# -r requirements/base.in
|
||||
# jsonschema
|
||||
python-dateutil==2.8.1
|
||||
python-dateutil==2.8.2
|
||||
# via
|
||||
# alembic
|
||||
# apache-superset
|
||||
@@ -207,7 +215,7 @@ python-dateutil==2.8.1
|
||||
# flask-appbuilder
|
||||
# holidays
|
||||
# pandas
|
||||
python-dotenv==0.15.0
|
||||
python-dotenv==0.19.0
|
||||
# via apache-superset
|
||||
python-editor==1.0.4
|
||||
# via alembic
|
||||
@@ -215,7 +223,7 @@ python-geohash==0.8.5
|
||||
# via apache-superset
|
||||
python3-openid==3.2.0
|
||||
# via flask-openid
|
||||
pytz==2020.4
|
||||
pytz==2021.1
|
||||
# via
|
||||
# babel
|
||||
# celery
|
||||
@@ -228,29 +236,32 @@ 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.2
|
||||
simplejson==3.17.3
|
||||
# via apache-superset
|
||||
six==1.15.0
|
||||
six==1.16.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.20
|
||||
sqlalchemy==1.3.24
|
||||
# via
|
||||
# alembic
|
||||
# apache-superset
|
||||
@@ -258,7 +269,7 @@ sqlalchemy==1.3.20
|
||||
# flask-sqlalchemy
|
||||
# marshmallow-sqlalchemy
|
||||
# sqlalchemy-utils
|
||||
sqlalchemy-utils==0.36.8
|
||||
sqlalchemy-utils==0.37.8
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
@@ -266,12 +277,14 @@ sqlparse==0.3.0
|
||||
# via apache-superset
|
||||
tabulate==0.8.9
|
||||
# via apache-superset
|
||||
typing-extensions==3.7.4.3
|
||||
typing-extensions==3.10.0.0
|
||||
# via
|
||||
# aiohttp
|
||||
# apache-superset
|
||||
urllib3==1.25.11
|
||||
# via selenium
|
||||
urllib3==1.26.6
|
||||
# via
|
||||
# requests
|
||||
# selenium
|
||||
vine==1.3.0
|
||||
# via
|
||||
# amqp
|
||||
@@ -282,13 +295,15 @@ 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.2
|
||||
yarl==1.6.3
|
||||
# via aiohttp
|
||||
zipp==3.4.1
|
||||
# via -r requirements/base.in
|
||||
|
||||
@@ -18,11 +18,11 @@
|
||||
-r base.in
|
||||
flask-cors>=2.0.0
|
||||
mysqlclient==1.4.2.post1
|
||||
pillow>=7.0.0,<8.0.0
|
||||
pillow>=8.3.1,<9
|
||||
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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# SHA1:c470411e2e9cb04b412a94f80a6a9d870bece74d
|
||||
# SHA1:dbd3e93a11a36fc6b18d6194ac96ba29bd0ad2a8
|
||||
#
|
||||
# This file is autogenerated by pip-compile-multi
|
||||
# To update, run:
|
||||
@@ -8,84 +8,68 @@
|
||||
-r base.txt
|
||||
-e file:.
|
||||
# via -r requirements/base.in
|
||||
boto3==1.16.10
|
||||
boto3==1.18.19
|
||||
# via tabulator
|
||||
botocore==1.19.10
|
||||
botocore==1.21.19
|
||||
# via
|
||||
# boto3
|
||||
# s3transfer
|
||||
cached-property==1.5.2
|
||||
# via tableschema
|
||||
certifi==2020.6.20
|
||||
# via requests
|
||||
deprecated==1.2.11
|
||||
# via pygithub
|
||||
et-xmlfile==1.0.1
|
||||
et-xmlfile==1.1.0
|
||||
# via openpyxl
|
||||
flask-cors==3.0.9
|
||||
flask-cors==3.0.10
|
||||
# via -r requirements/development.in
|
||||
future==0.18.2
|
||||
# via pyhive
|
||||
ijson==3.1.2.post0
|
||||
ijson==3.1.4
|
||||
# via tabulator
|
||||
jdcal==1.4.1
|
||||
# via openpyxl
|
||||
jmespath==0.10.0
|
||||
# via
|
||||
# boto3
|
||||
# botocore
|
||||
jsonlines==1.2.0
|
||||
jsonlines==2.0.0
|
||||
# via tabulator
|
||||
linear-tsv==1.1.0
|
||||
# via tabulator
|
||||
mysqlclient==1.4.2.post1
|
||||
# via -r requirements/development.in
|
||||
openpyxl==3.0.5
|
||||
openpyxl==3.0.7
|
||||
# via tabulator
|
||||
pillow==7.2.0
|
||||
pillow==8.3.1
|
||||
# via -r requirements/development.in
|
||||
progress==1.5
|
||||
progress==1.6
|
||||
# via -r requirements/development.in
|
||||
psycopg2-binary==2.8.5
|
||||
# via -r requirements/development.in
|
||||
pydruid==0.6.1
|
||||
pure-sasl==0.6.2
|
||||
# via thrift-sasl
|
||||
pydruid==0.6.2
|
||||
# via -r requirements/development.in
|
||||
pygithub==1.54.1
|
||||
pyhive[hive]==0.6.4
|
||||
# via -r requirements/development.in
|
||||
pyhive[hive]==0.6.3
|
||||
pyinstrument==4.0.2
|
||||
# via -r requirements/development.in
|
||||
requests==2.24.0
|
||||
# via
|
||||
# pydruid
|
||||
# pygithub
|
||||
# tableschema
|
||||
# tabulator
|
||||
rfc3986==1.4.0
|
||||
rfc3986==1.5.0
|
||||
# via tableschema
|
||||
s3transfer==0.3.3
|
||||
s3transfer==0.5.0
|
||||
# via boto3
|
||||
sasl==0.2.1
|
||||
# via
|
||||
# pyhive
|
||||
# thrift-sasl
|
||||
tableschema==1.20.0
|
||||
tableschema==1.20.2
|
||||
# via -r requirements/development.in
|
||||
tabulator==1.52.5
|
||||
tabulator==1.53.5
|
||||
# via tableschema
|
||||
thrift==0.13.0
|
||||
# via
|
||||
# -r requirements/development.in
|
||||
# pyhive
|
||||
# thrift-sasl
|
||||
thrift-sasl==0.4.2
|
||||
thrift-sasl==0.4.3
|
||||
# via pyhive
|
||||
unicodecsv==0.14.1
|
||||
# via
|
||||
# tableschema
|
||||
# tabulator
|
||||
wrapt==1.12.1
|
||||
# via deprecated
|
||||
xlrd==1.2.0
|
||||
xlrd==2.0.1
|
||||
# via tabulator
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
|
||||
@@ -8,15 +8,15 @@
|
||||
-r base.txt
|
||||
-e file:.
|
||||
# via -r requirements/base.in
|
||||
gevent==20.9.0
|
||||
gevent==21.8.0
|
||||
# via -r requirements/docker.in
|
||||
greenlet==0.4.17
|
||||
greenlet==1.1.1
|
||||
# via gevent
|
||||
psycopg2-binary==2.8.6
|
||||
psycopg2-binary==2.9.1
|
||||
# via -r requirements/docker.in
|
||||
zope.event==4.5.0
|
||||
# via gevent
|
||||
zope.interface==5.1.2
|
||||
zope.interface==5.4.0
|
||||
# via gevent
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
|
||||
@@ -17,3 +17,7 @@
|
||||
pip-compile-multi!=1.5.9
|
||||
pre-commit
|
||||
tox
|
||||
py>=1.10.0
|
||||
click==7.1.2
|
||||
packaging==21.0
|
||||
pyparsing==2.4.7
|
||||
|
||||
@@ -1,62 +1,76 @@
|
||||
# SHA1:f95c1152ed0bcc554f3668440d63eec2a7d1567c
|
||||
# SHA1:32bae3a7c758a411c20c86ff4d5bff825be46314
|
||||
#
|
||||
# This file is autogenerated by pip-compile-multi
|
||||
# To update, run:
|
||||
#
|
||||
# pip-compile-multi
|
||||
#
|
||||
appdirs==1.4.4
|
||||
backports.entry-points-selectable==1.1.0
|
||||
# via virtualenv
|
||||
cfgv==3.2.0
|
||||
cfgv==3.3.0
|
||||
# via pre-commit
|
||||
click==7.1.2
|
||||
# via
|
||||
# -r requirements/integration.in
|
||||
# pip-compile-multi
|
||||
# pip-tools
|
||||
distlib==0.3.1
|
||||
distlib==0.3.2
|
||||
# via virtualenv
|
||||
filelock==3.0.12
|
||||
# via
|
||||
# tox
|
||||
# virtualenv
|
||||
identify==1.5.9
|
||||
identify==2.2.13
|
||||
# via pre-commit
|
||||
nodeenv==1.5.0
|
||||
nodeenv==1.6.0
|
||||
# via pre-commit
|
||||
packaging==20.4
|
||||
# via tox
|
||||
packaging==21.0
|
||||
# via
|
||||
# -r requirements/integration.in
|
||||
# tox
|
||||
pep517==0.11.0
|
||||
# via pip-tools
|
||||
pip-compile-multi==2.4.1
|
||||
# via -r requirements/integration.in
|
||||
pip-tools==5.3.1
|
||||
pip-tools==6.2.0
|
||||
# via pip-compile-multi
|
||||
platformdirs==2.2.0
|
||||
# via virtualenv
|
||||
pluggy==0.13.1
|
||||
# via tox
|
||||
pre-commit==2.8.2
|
||||
pre-commit==2.14.0
|
||||
# via -r requirements/integration.in
|
||||
py==1.9.0
|
||||
# via tox
|
||||
py==1.10.0
|
||||
# via
|
||||
# -r requirements/integration.in
|
||||
# tox
|
||||
pyparsing==2.4.7
|
||||
# via packaging
|
||||
# via
|
||||
# -r requirements/integration.in
|
||||
# packaging
|
||||
pyyaml==5.4.1
|
||||
# via pre-commit
|
||||
six==1.15.0
|
||||
six==1.16.0
|
||||
# via
|
||||
# packaging
|
||||
# pip-tools
|
||||
# tox
|
||||
# virtualenv
|
||||
toml==0.10.2
|
||||
# via
|
||||
# pre-commit
|
||||
# tox
|
||||
toposort==1.5
|
||||
tomli==1.2.1
|
||||
# via pep517
|
||||
toposort==1.6
|
||||
# via pip-compile-multi
|
||||
tox==3.20.1
|
||||
tox==3.24.1
|
||||
# via -r requirements/integration.in
|
||||
virtualenv==20.1.0
|
||||
virtualenv==20.7.2
|
||||
# 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
|
||||
|
||||
@@ -22,14 +22,15 @@ freezegun
|
||||
ipdb
|
||||
# pinning ipython as pip-compile-multi was bringing higher version
|
||||
# of the ipython that was not found in CI
|
||||
ipython==7.16.1
|
||||
ipython
|
||||
openapi-spec-validator
|
||||
openpyxl
|
||||
parameterized
|
||||
pyfakefs
|
||||
pyhive[presto]>=0.6.3
|
||||
pylint
|
||||
pylint==2.9.6
|
||||
pytest
|
||||
pytest-cov
|
||||
statsd
|
||||
pytest-mock
|
||||
packaging==21.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# SHA1:d39180c0eb498d1a7dd73b8428e6ab304b728484
|
||||
# SHA1:97a1d3094738243d47824948a0d6fdcb4a784524
|
||||
#
|
||||
# This file is autogenerated by pip-compile-multi
|
||||
# To update, run:
|
||||
@@ -11,78 +11,86 @@
|
||||
# via -r requirements/base.in
|
||||
appnope==0.1.2
|
||||
# via ipython
|
||||
astroid==2.4.2
|
||||
astroid==2.6.6
|
||||
# via pylint
|
||||
backcall==0.2.0
|
||||
# via ipython
|
||||
coverage==5.3
|
||||
coverage==5.5
|
||||
# via pytest-cov
|
||||
decorator==5.0.9
|
||||
# via ipython
|
||||
docker==4.3.1
|
||||
# via
|
||||
# ipdb
|
||||
# ipython
|
||||
docker==5.0.0
|
||||
# via -r requirements/testing.in
|
||||
flask-testing==0.8.0
|
||||
flask-testing==0.8.1
|
||||
# via -r requirements/testing.in
|
||||
freezegun==1.0.0
|
||||
freezegun==1.1.0
|
||||
# via -r requirements/testing.in
|
||||
iniconfig==1.1.1
|
||||
# via pytest
|
||||
ipdb==0.13.4
|
||||
ipdb==0.13.9
|
||||
# via -r requirements/testing.in
|
||||
ipython==7.16.1
|
||||
ipython==7.26.0
|
||||
# via
|
||||
# -r requirements/testing.in
|
||||
# ipdb
|
||||
ipython-genutils==0.2.0
|
||||
# via traitlets
|
||||
isort==5.6.4
|
||||
isort==5.9.3
|
||||
# via pylint
|
||||
jedi==0.17.2
|
||||
jedi==0.18.0
|
||||
# via ipython
|
||||
lazy-object-proxy==1.4.3
|
||||
lazy-object-proxy==1.6.0
|
||||
# via astroid
|
||||
matplotlib-inline==0.1.2
|
||||
# via ipython
|
||||
mccabe==0.6.1
|
||||
# via pylint
|
||||
openapi-spec-validator==0.2.9
|
||||
openapi-schema-validator==0.1.5
|
||||
# via openapi-spec-validator
|
||||
openapi-spec-validator==0.3.1
|
||||
# via -r requirements/testing.in
|
||||
parameterized==0.7.4
|
||||
parameterized==0.8.1
|
||||
# via -r requirements/testing.in
|
||||
parso==0.7.1
|
||||
parso==0.8.2
|
||||
# via jedi
|
||||
pexpect==4.8.0
|
||||
# via ipython
|
||||
pickleshare==0.7.5
|
||||
# via ipython
|
||||
prompt-toolkit==3.0.8
|
||||
prompt-toolkit==3.0.19
|
||||
# via ipython
|
||||
ptyprocess==0.6.0
|
||||
ptyprocess==0.7.0
|
||||
# via pexpect
|
||||
pyfakefs==4.4.0
|
||||
pyfakefs==4.5.0
|
||||
# via -r requirements/testing.in
|
||||
pygments==2.7.2
|
||||
pygments==2.9.0
|
||||
# via ipython
|
||||
pyhive[hive,presto]==0.6.3
|
||||
pyhive[hive,presto]==0.6.4
|
||||
# via
|
||||
# -r requirements/development.in
|
||||
# -r requirements/testing.in
|
||||
pylint==2.6.0
|
||||
pylint==2.9.6
|
||||
# via -r requirements/testing.in
|
||||
pytest==6.1.2
|
||||
pytest==6.2.4
|
||||
# via
|
||||
# -r requirements/testing.in
|
||||
# pytest-cov
|
||||
# pytest-mock
|
||||
pytest-cov==2.10.1
|
||||
pytest-cov==2.12.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
|
||||
# via
|
||||
# ipython
|
||||
# matplotlib-inline
|
||||
wcwidth==0.2.5
|
||||
# via prompt-toolkit
|
||||
websocket-client==0.57.0
|
||||
websocket-client==1.2.0
|
||||
# via docker
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
|
||||
@@ -44,9 +44,13 @@ 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)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module) # type: ignore
|
||||
return module
|
||||
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))
|
||||
)
|
||||
|
||||
|
||||
def extract_modified_tables(module: ModuleType) -> Set[str]:
|
||||
|
||||
@@ -34,10 +34,10 @@ REGEXES=()
|
||||
for CHECK in "$@"
|
||||
do
|
||||
if [[ ${CHECK} == "python" ]]; then
|
||||
REGEX="(^\.github\/workflows\/.*python|^tests\/|^superset\/|^setup\.py|^requirements\/.+\.txt)"
|
||||
REGEX="(^\.github\/workflows\/.*python|^tests\/|^superset\/|^setup\.py|^requirements\/.+\.txt|^\.pylintrc)"
|
||||
echo "Searching for changes in python files"
|
||||
elif [[ ${CHECK} == "frontend" ]]; then
|
||||
REGEX="(^\.github\/workflows\/.*(frontend|e2e)|^superset-frontend\/)"
|
||||
REGEX="(^\.github\/workflows\/.*(bashlib|frontend|e2e)|^superset-frontend\/)"
|
||||
echo "Searching for changes in frontend files"
|
||||
else
|
||||
echo "Invalid check: \"${CHECK}\". Falling back to exiting with FAILURE code"
|
||||
|
||||
28
scripts/ci_check_npm_lock_version.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/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
|
||||
@@ -18,6 +18,11 @@
|
||||
#
|
||||
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"
|
||||
|
||||
@@ -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,tabulate,typing_extensions,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,typing_extensions,urllib3,werkzeug,wtforms,wtforms_json,yaml
|
||||
multi_line_output = 3
|
||||
order_by_type = false
|
||||
|
||||
|
||||
12
setup.py
@@ -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.3.0, <4.0.0",
|
||||
"flask-appbuilder>=3.3.4, <4.0.0",
|
||||
"flask-caching>=1.10.0",
|
||||
"flask-compress",
|
||||
"flask-talisman",
|
||||
@@ -102,18 +102,20 @@ 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.36.6,<0.37",
|
||||
"sqlalchemy-utils>=0.37.8, <0.38",
|
||||
"sqlparse==0.3.0", # PINNED! see https://github.com/andialbrecht/sqlparse/issues/562
|
||||
"tabulate==0.8.9",
|
||||
"typing-extensions>=3.7.4.3,<4", # needed to support typing.Literal on py37
|
||||
"typing-extensions>=3.10, <4", # needed to support Literal (3.8) and TypeGuard (3.10)
|
||||
"wtforms-json",
|
||||
],
|
||||
extras_require={
|
||||
"athena": ["pyathena>=1.10.8,<1.11"],
|
||||
"athena": ["pyathena>=1.10.8, <1.11"],
|
||||
"aurora-data-api": ["preset-sqlalchemy-aurora-data-api>=0.2.8,<0.3"],
|
||||
"bigquery": [
|
||||
"pandas_gbq>=0.10.0",
|
||||
"pybigquery>=0.4.10",
|
||||
@@ -133,6 +135,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"],
|
||||
"hana": ["hdbcli==2.4.162", "sqlalchemy_hana==0.4.0"],
|
||||
"hive": ["pyhive[hive]>=0.6.1", "tableschema", "thrift>=0.11.0, <1.0.0"],
|
||||
@@ -167,5 +170,6 @@ setup(
|
||||
classifiers=[
|
||||
"Programming Language :: Python :: 3.7",
|
||||
"Programming Language :: Python :: 3.8",
|
||||
"Programming Language :: Python :: 3.9",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
**/*.sh
|
||||
coverage/**
|
||||
dist/*
|
||||
images/*
|
||||
src/assets/images/*
|
||||
src/assets/stylesheets/*
|
||||
node_modules/*
|
||||
node_modules*/*
|
||||
stylesheets/*
|
||||
vendor/*
|
||||
docs/*
|
||||
src/dashboard/deprecated/*
|
||||
|
||||
@@ -167,6 +167,7 @@ module.exports = {
|
||||
'src/**/*.test.tsx',
|
||||
'src/**/*.test.js',
|
||||
'src/**/*.test.jsx',
|
||||
'src/**/fixtures.*',
|
||||
],
|
||||
plugins: ['jest', 'jest-dom', 'no-only-tests', 'testing-library'],
|
||||
env: {
|
||||
|
||||
@@ -22,13 +22,15 @@ 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/register',
|
||||
'@storybook/addon-knobs',
|
||||
'storybook-addon-paddings',
|
||||
],
|
||||
webpackFinal: config => ({
|
||||
|
||||
@@ -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,15 +49,18 @@ const providerDecorator = Story => (
|
||||
addDecorator(jsxDecorator);
|
||||
addDecorator(themeDecorator);
|
||||
addDecorator(providerDecorator);
|
||||
addDecorator(withPaddings);
|
||||
addDecorator(WithPaddings);
|
||||
|
||||
addParameters({
|
||||
paddings: [
|
||||
{ name: 'None', value: '0px' },
|
||||
{ name: 'Small', value: '16px' },
|
||||
{ name: 'Medium', value: '32px', default: true },
|
||||
{ name: 'Large', value: '64px' },
|
||||
],
|
||||
paddings: {
|
||||
values: [
|
||||
{ name: 'None', value: '0px' },
|
||||
{ name: 'Small', value: '16px' },
|
||||
{ name: 'Medium', value: '32px' },
|
||||
{ name: 'Large', value: '64px' },
|
||||
],
|
||||
default: 'Medium',
|
||||
},
|
||||
options: {
|
||||
storySort: {
|
||||
method: 'alphabetical',
|
||||
|
||||
@@ -82,5 +82,8 @@ module.exports = {
|
||||
],
|
||||
],
|
||||
},
|
||||
testableProduction: {
|
||||
plugins: [],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -27,44 +27,34 @@ describe('chart card view filters', () => {
|
||||
|
||||
it('should filter by owners correctly', () => {
|
||||
// filter by owners
|
||||
cy.get('.Select__control').first().click();
|
||||
cy.get('.Select__menu').contains('alpha user').click();
|
||||
cy.get('[data-test="filters-select"]').first().click();
|
||||
cy.get('.rc-virtual-list').contains('alpha user').click();
|
||||
cy.get('[data-test="styled-card"]').should('not.exist');
|
||||
cy.get('.Select__control').first().click();
|
||||
cy.get('.Select__menu').contains('gamma user').click();
|
||||
cy.get('[data-test="filters-select"]').first().click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(1).click();
|
||||
cy.get('.Select__menu').contains('alpha user').click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('.rc-virtual-list').contains('alpha user').click();
|
||||
cy.get('.ant-card').should('not.exist');
|
||||
cy.get('.Select__control').eq(1).click();
|
||||
cy.get('.Select__menu').contains('gamma user').click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(2).click();
|
||||
cy.get('.Select__menu').contains('area').click({ timeout: 5000 });
|
||||
cy.get('[data-test="filters-select"]').eq(2).click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(2).click();
|
||||
cy.get('.Select__control').eq(2).type('world_map{enter}');
|
||||
cy.get('[data-test="filters-select"]').eq(2).click();
|
||||
cy.get('[data-test="filters-select"]').eq(2).type('world_map{enter}');
|
||||
cy.get('[data-test="styled-card"]').should('have.length', 1);
|
||||
cy.get('[data-test="styled-card"]')
|
||||
.contains('% Rural')
|
||||
@@ -73,14 +63,16 @@ describe('chart card view filters', () => {
|
||||
|
||||
it('should filter by datasource correctly', () => {
|
||||
// filter by datasource
|
||||
cy.get('.Select__control').eq(3).click();
|
||||
cy.get('.Select__menu').contains('unicode_test').click();
|
||||
cy.get('[data-test="filters-select"]').eq(3).click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(2).click();
|
||||
cy.get('.Select__control').eq(2).type('energy_usage{enter}{enter}');
|
||||
cy.get('[data-test="filters-select"]').eq(2).click();
|
||||
cy.get('[data-test="filters-select"]')
|
||||
.eq(2)
|
||||
.type('energy_usage{enter}{enter}');
|
||||
cy.get('[data-test="styled-card"]').its('length').should('be.gt', 0);
|
||||
});
|
||||
});
|
||||
@@ -94,57 +86,49 @@ describe('chart list view filters', () => {
|
||||
|
||||
it('should filter by owners correctly', () => {
|
||||
// filter by owners
|
||||
cy.get('.Select__control').first().click();
|
||||
cy.get('.Select__menu').contains('alpha user').click();
|
||||
cy.get('[data-test="filters-select"]').first().click();
|
||||
cy.get('.rc-virtual-list').contains('alpha user').click();
|
||||
cy.get('[data-test="table-row"]').should('not.exist');
|
||||
cy.get('.Select__control').first().click();
|
||||
cy.get('.Select__menu').contains('gamma user').click();
|
||||
cy.get('[data-test="filters-select"]').first().click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(1).click();
|
||||
cy.get('.Select__menu').contains('alpha user').click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('.rc-virtual-list').contains('alpha user').click();
|
||||
cy.get('[data-test="table-row"]').should('not.exist');
|
||||
cy.get('.Select__control').eq(1).click();
|
||||
cy.get('.Select__menu').contains('gamma user').click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(2).click();
|
||||
cy.get('.Select__menu').contains('area').click({ timeout: 5000 });
|
||||
cy.get('[data-test="filters-select"]').eq(2).click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(2).click();
|
||||
cy.get('.Select__control').eq(2).type('world_map{enter}');
|
||||
cy.get('[data-test="filters-select"]').eq(2).click();
|
||||
cy.get('[data-test="filters-select"]').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('.Select__control').eq(3).click();
|
||||
cy.get('.Select__menu').contains('unicode_test').click();
|
||||
cy.get('[data-test="filters-select"]').eq(3).click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(3).click();
|
||||
cy.get('.Select__control').eq(3).type('energy_usage{enter}{enter}');
|
||||
cy.get('[data-test="filters-select"]').eq(3).click();
|
||||
cy.get('[data-test="filters-select"]')
|
||||
.eq(3)
|
||||
.type('energy_usage{enter}{enter}');
|
||||
cy.get('[data-test="table-row"]').its('length').should('be.gt', 0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -24,10 +24,10 @@ import { WORLD_HEALTH_DASHBOARD } from './dashboard.helper';
|
||||
|
||||
function selectColorScheme(color: string) {
|
||||
// open color scheme dropdown
|
||||
cy.get('.modal-body')
|
||||
.contains('Color Scheme')
|
||||
cy.get('.ant-modal-body')
|
||||
.contains('Color scheme')
|
||||
.parents('.ControlHeader')
|
||||
.next('.Select')
|
||||
.next('.ant-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('.modal-body')
|
||||
cy.get('.ant-modal-body')
|
||||
.find('#json_metadata')
|
||||
.should('be.visible')
|
||||
.then(() => {
|
||||
@@ -50,12 +50,15 @@ function assertMetadata(text: string) {
|
||||
}
|
||||
|
||||
function typeMetadata(text: string) {
|
||||
cy.get('.modal-body').find('#json_metadata').should('be.visible').type(text);
|
||||
cy.get('.ant-modal-body')
|
||||
.find('#json_metadata')
|
||||
.should('be.visible')
|
||||
.type(text);
|
||||
}
|
||||
|
||||
function openAdvancedProperties() {
|
||||
return cy
|
||||
.get('.modal-body')
|
||||
.get('.ant-modal-body')
|
||||
.contains('Advanced')
|
||||
.should('be.visible')
|
||||
.click();
|
||||
@@ -96,11 +99,11 @@ describe('Dashboard edit action', () => {
|
||||
|
||||
// save edit changes
|
||||
cy.get('.ant-modal-footer')
|
||||
.contains('Save')
|
||||
.contains('Apply')
|
||||
.click()
|
||||
.then(() => {
|
||||
// assert that modal edit window has closed
|
||||
cy.get('.ant-modal-body').should('not.exist');
|
||||
cy.get('.ant-modal-body').should('not.be.visible');
|
||||
|
||||
// assert title has been updated
|
||||
cy.get('.editable-title input').should('have.value', dashboardTitle);
|
||||
@@ -146,7 +149,7 @@ describe('Dashboard edit action', () => {
|
||||
.click()
|
||||
.then(() => {
|
||||
// assert that modal edit window has closed
|
||||
cy.get('.modal-body').should('not.exist');
|
||||
cy.get('.ant-modal-body').should('not.exist');
|
||||
|
||||
// assert color has been updated
|
||||
openDashboardEditProperties();
|
||||
@@ -177,7 +180,7 @@ describe('Dashboard edit action', () => {
|
||||
.click()
|
||||
.then(() => {
|
||||
// assert that modal edit window has closed
|
||||
cy.get('.modal-body')
|
||||
cy.get('.ant-modal-body')
|
||||
.contains('A valid color scheme is required')
|
||||
.should('be.visible');
|
||||
});
|
||||
|
||||
@@ -24,11 +24,7 @@ describe('Dashboard edit markdown', () => {
|
||||
cy.visit(TABBED_DASHBOARD);
|
||||
});
|
||||
|
||||
it('should load AceEditor on demand', () => {
|
||||
let numScripts = 0;
|
||||
cy.get('script').then(nodes => {
|
||||
numScripts = nodes.length;
|
||||
});
|
||||
it('should add markdown component to dashboard', () => {
|
||||
cy.get('[data-test="dashboard-header"]')
|
||||
.find('[aria-label="edit-alt"]')
|
||||
.click();
|
||||
@@ -37,11 +33,6 @@ 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');
|
||||
@@ -49,11 +40,6 @@ 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',
|
||||
@@ -75,12 +61,6 @@ 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')
|
||||
|
||||
@@ -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('#dashboard-creatable-select')
|
||||
.type(`${dashboard}{enter}{enter}`);
|
||||
.find('input[aria-label="Select a dashboard"]')
|
||||
.type(`${dashboard}`, { force: true });
|
||||
cy.get('[data-test="btn-modal-save"]').click();
|
||||
});
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -67,32 +67,30 @@ describe('Dashboard save action', () => {
|
||||
// should load chart
|
||||
WORLD_HEALTH_CHARTS.forEach(waitForChartLoad);
|
||||
|
||||
// remove box_plot chart from dashboard
|
||||
// remove treemap chart from dashboard
|
||||
cy.get('[aria-label="edit-alt"]').click({ timeout: 5000 });
|
||||
cy.get('[data-test="dashboard-delete-component-button"]')
|
||||
.last()
|
||||
.trigger('moustenter')
|
||||
.trigger('mouseenter')
|
||||
.click();
|
||||
|
||||
cy.get('[data-test="grid-container"]')
|
||||
.find('.box_plot')
|
||||
.should('not.exist');
|
||||
cy.get('[data-test="grid-container"]').find('.treemap').should('not.exist');
|
||||
|
||||
cy.intercept('POST', '/superset/save_dash/**/').as('saveRequest');
|
||||
cy.intercept('PUT', '/api/v1/dashboard/**').as('putDashboardRequest');
|
||||
cy.get('[data-test="dashboard-header"]')
|
||||
.find('[data-test="header-save-button"]')
|
||||
.contains('Save')
|
||||
.click();
|
||||
|
||||
// go back to view mode
|
||||
cy.wait('@saveRequest');
|
||||
cy.wait('@putDashboardRequest');
|
||||
cy.get('[data-test="dashboard-header"]')
|
||||
.find('[aria-label="edit-alt"]')
|
||||
.click();
|
||||
|
||||
// deleted boxplot should still not exist
|
||||
// deleted treemap should still not exist
|
||||
cy.get('[data-test="grid-container"]')
|
||||
.find('.box_plot', { timeout: 20000 })
|
||||
.find('.treemap', { timeout: 20000 })
|
||||
.should('not.exist');
|
||||
});
|
||||
|
||||
|
||||
@@ -27,44 +27,34 @@ describe('dashboard filters card view', () => {
|
||||
|
||||
it('should filter by owners correctly', () => {
|
||||
// filter by owners
|
||||
cy.get('.Select__control').first().click();
|
||||
cy.get('.Select__menu').contains('alpha user').click();
|
||||
cy.get('[data-test="filters-select"]').first().click();
|
||||
cy.get('.rc-virtual-list').contains('alpha user').click();
|
||||
cy.get('[data-test="styled-card"]').should('not.exist');
|
||||
cy.get('.Select__control').first().click();
|
||||
cy.get('.Select__menu').contains('gamma user').click();
|
||||
cy.get('[data-test="filters-select"]').first().click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(1).click();
|
||||
cy.get('.Select__menu').contains('alpha user').click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('.rc-virtual-list').contains('alpha user').click();
|
||||
cy.get('.ant-card').should('not.exist');
|
||||
cy.get('.Select__control').eq(1).click();
|
||||
cy.get('.Select__menu').contains('gamma user').click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('.rc-virtual-list').contains('gamma user').click();
|
||||
cy.get('.ant-card').should('not.exist');
|
||||
});
|
||||
|
||||
it('should filter by published correctly', () => {
|
||||
// filter by published
|
||||
cy.get('.Select__control').eq(2).click();
|
||||
cy.get('.Select__menu').contains('Published').click({ timeout: 5000 });
|
||||
cy.get('[data-test="filters-select"]').eq(2).click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(1).click();
|
||||
cy.get('.Select__control').eq(1).type('unpub{enter}');
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).type('unpub{enter}');
|
||||
cy.get('[data-test="styled-card"]').should('have.length', 3);
|
||||
});
|
||||
});
|
||||
@@ -78,44 +68,34 @@ describe('dashboard filters list view', () => {
|
||||
|
||||
it('should filter by owners correctly', () => {
|
||||
// filter by owners
|
||||
cy.get('.Select__control').first().click();
|
||||
cy.get('.Select__menu').contains('alpha user').click();
|
||||
cy.get('[data-test="filters-select"]').first().click();
|
||||
cy.get('.rc-virtual-list').contains('alpha user').click();
|
||||
cy.get('[data-test="table-row"]').should('not.exist');
|
||||
cy.get('.Select__control').first().click();
|
||||
cy.get('.Select__menu').contains('gamma user').click();
|
||||
cy.get('[data-test="filters-select"]').first().click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(1).click();
|
||||
cy.get('.Select__menu').contains('alpha user').click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('.rc-virtual-list').contains('alpha user').click();
|
||||
cy.get('[data-test="table-row"]').should('not.exist');
|
||||
cy.get('.Select__control').eq(1).click();
|
||||
cy.get('.Select__menu').contains('gamma user').click();
|
||||
cy.get('[data-test="filters-select"]').eq(1).click();
|
||||
cy.get('.rc-virtual-list').contains('gamma user').click();
|
||||
cy.get('[data-test="table-row"]').should('not.exist');
|
||||
});
|
||||
|
||||
it('should filter by published correctly', () => {
|
||||
// filter by published
|
||||
cy.get('.Select__control').eq(2).click();
|
||||
cy.get('.Select__menu').contains('Published').click();
|
||||
cy.get('[data-test="filters-select"]').eq(2).click();
|
||||
cy.get('.rc-virtual-list').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('.Select__control').eq(2).click();
|
||||
cy.get('.Select__control').eq(2).type('unpub{enter}');
|
||||
cy.get('[data-test="filters-select"]').eq(2).click();
|
||||
cy.get('[data-test="filters-select"]').eq(2).type('unpub{enter}');
|
||||
cy.get('[data-test="table-row"]').should('have.length', 3);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -26,10 +26,6 @@ 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', () => {
|
||||
@@ -56,7 +52,7 @@ describe('AdhocFilters', () => {
|
||||
});
|
||||
|
||||
xit('Set simple adhoc filter', () => {
|
||||
cy.get('[data-test=adhoc-filter-simple-value] .Select__control').click();
|
||||
cy.get('[aria-label="Comparator option"] .Select__control').click();
|
||||
cy.get('[data-test=adhoc-filter-simple-value] input[type=text]')
|
||||
.focus()
|
||||
.type('Jack{enter}', { delay: 20 });
|
||||
|
||||
@@ -42,8 +42,12 @@ describe('AdhocMetrics', () => {
|
||||
cy.get('[data-test="AdhocMetricEditTitle#trigger"]').click();
|
||||
cy.get('[data-test="AdhocMetricEditTitle#input"]').type(metricName);
|
||||
|
||||
cy.get('[name="select-column"]').click().type('num_girls{enter}');
|
||||
cy.get('[name="select-aggregate"]').click().type('sum{enter}');
|
||||
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('[data-test="AdhocMetricEdit#save"]').contains('Save').click();
|
||||
|
||||
|
||||
@@ -29,13 +29,13 @@ describe('Advanced analytics', () => {
|
||||
|
||||
cy.get('.ant-collapse-header').contains('Advanced Analytics').click();
|
||||
|
||||
cy.get('[data-test=time_compare]').find('.Select__control').click();
|
||||
cy.get('[data-test=time_compare]').find('.ant-select').click();
|
||||
cy.get('[data-test=time_compare]')
|
||||
.find('input[type=text]')
|
||||
.find('input[type=search]')
|
||||
.type('28 days{enter}');
|
||||
|
||||
cy.get('[data-test=time_compare]')
|
||||
.find('input[type=text]')
|
||||
.find('input[type=search]')
|
||||
.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('.Select__multi-value__label')
|
||||
.find('.ant-select-selector')
|
||||
.contains('28 days');
|
||||
cy.get('[data-test=time_compare]')
|
||||
.find('.Select__multi-value__label')
|
||||
.find('.ant-select-selector')
|
||||
.contains('1 year');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -105,9 +105,6 @@ 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',
|
||||
@@ -238,8 +235,8 @@ describe('Groupby control', () => {
|
||||
cy.verifySliceSuccess({ waitAlias: '@chartData' });
|
||||
|
||||
cy.get('[data-test=groupby]').within(() => {
|
||||
cy.get('.Select__control').click();
|
||||
cy.get('input[type=text]').type('state{enter}');
|
||||
cy.get('.ant-select').click();
|
||||
cy.get('input[type=search]').type('state{enter}');
|
||||
});
|
||||
cy.get('button[data-test="run-query-button"]').click();
|
||||
cy.verifySliceSuccess({ waitAlias: '@chartData', chartSelector: 'svg' });
|
||||
|
||||
@@ -126,8 +126,12 @@ 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('#dashboard-creatable-select')
|
||||
.type(`${dashboardTitle}{enter}{enter}`);
|
||||
.find('input[aria-label="Select a dashboard"]')
|
||||
.type(`${dashboardTitle}`, { force: true });
|
||||
|
||||
cy.get(`.ant-select-item[label="${dashboardTitle}"]`).click({
|
||||
force: true,
|
||||
});
|
||||
|
||||
cy.get('[data-test="btn-modal-save"]').click();
|
||||
cy.verifySliceSuccess({ waitAlias: '@chartData' });
|
||||
@@ -153,8 +157,12 @@ 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('#dashboard-creatable-select')
|
||||
.type(`${dashboardTitle}{enter}{enter}`);
|
||||
.find('input[aria-label="Select a dashboard"]')
|
||||
.type(`${dashboardTitle}{enter}`, { force: true });
|
||||
|
||||
cy.get(`.ant-select-item[label="${dashboardTitle}"]`).click({
|
||||
force: true,
|
||||
});
|
||||
|
||||
cy.get('[data-test="btn-modal-save"]').click();
|
||||
cy.verifySliceSuccess({ waitAlias: '@chartData' });
|
||||
|
||||
@@ -32,14 +32,6 @@ 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));
|
||||
@@ -53,8 +45,10 @@ 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('[name="select-column"]').click().type('num{enter}');
|
||||
cy.get('[name="select-aggregate"]').click().type('sum{enter}');
|
||||
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('[data-test="AdhocMetricEdit#save"]').contains('Save').click();
|
||||
|
||||
cy.get('.text-danger').should('not.exist');
|
||||
@@ -85,7 +79,6 @@ 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', () => {
|
||||
|
||||
@@ -54,7 +54,7 @@ describe('Visualization > Table', () => {
|
||||
granularity_sqla: undefined,
|
||||
metrics: ['count'],
|
||||
});
|
||||
cy.get('input[name="select-granularity_sqla"]').should('have.value', 'ds');
|
||||
cy.get('[data-test=granularity_sqla] .column-option-label').contains('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: 'P0.25Y',
|
||||
time_grain_sqla: 'P3M',
|
||||
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: 'P0.25Y',
|
||||
time_grain_sqla: 'P3M',
|
||||
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: 'P0.25Y',
|
||||
time_grain_sqla: 'P3M',
|
||||
metrics: [NUM_METRIC, MAX_DS],
|
||||
groupby: ['name'],
|
||||
});
|
||||
|
||||
2953
superset-frontend/cypress-base/package-lock.json
generated
@@ -7,18 +7,18 @@
|
||||
"cypress-run-chrome": "cypress run --browser chrome --headless",
|
||||
"cypress-debug": "cypress open --config watchForFileChanges=true"
|
||||
},
|
||||
"author": "Apcahe",
|
||||
"author": "Apache",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@cypress/code-coverage": "^3.9.2",
|
||||
"@superset-ui/core": "^0.17.42",
|
||||
"@cypress/code-coverage": "^3.9.11",
|
||||
"@superset-ui/core": "^0.18.4",
|
||||
"react-dom": "^16.13.0",
|
||||
"rison": "^0.1.1",
|
||||
"shortid": "^2.2.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"cypress": "^6.3.0",
|
||||
"eslint-plugin-cypress": "^2.11.2"
|
||||
"eslint-plugin-cypress": "^2.12.1"
|
||||
},
|
||||
"nyc": {
|
||||
"reporter": [
|
||||
|
||||
@@ -1,22 +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.
|
||||
-->
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.335 8.735L7.30998 1.735C7.04507 1.26004 6.54382 0.965683 5.99998 0.965683C5.45614 0.965683 4.9549 1.26004 4.68998 1.735L0.689984 8.735C0.416009 9.19706 0.410037 9.77036 0.674327 10.238C0.938617 10.7057 1.43282 10.9963 1.96998 11H10.03C10.5716 11.0053 11.0741 10.7182 11.3445 10.2489C11.6149 9.77957 11.6113 9.20091 11.335 8.735Z" fill="currentColor"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 4.5C5.5 4.22386 5.72386 4 6 4C6.27614 4 6.5 4.22386 6.5 4.5V6.5C6.5 6.77614 6.27614 7 6 7C5.72386 7 5.5 6.77614 5.5 6.5V4.5ZM5.5 8.5C5.5 8.22386 5.72386 8 6 8C6.27614 8 6.5 8.22386 6.5 8.5C6.5 8.77614 6.27614 9 6 9C5.72386 9 5.5 8.77614 5.5 8.5Z" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB |
@@ -19,8 +19,8 @@
|
||||
module.exports = {
|
||||
testRegex: '(\\/spec|\\/src)\\/.*(_spec|\\.test)\\.(j|t)sx?$',
|
||||
moduleNameMapper: {
|
||||
'\\.(css|less)$': '<rootDir>/spec/__mocks__/styleMock.js',
|
||||
'\\.(gif|ttf|eot|png|jpg)$': '<rootDir>/spec/__mocks__/fileMock.js',
|
||||
'\\.(css|less|geojson)$': '<rootDir>/spec/__mocks__/mockExportObject.js',
|
||||
'\\.(gif|ttf|eot|png|jpg)$': '<rootDir>/spec/__mocks__/mockExportString.js',
|
||||
'\\.svg$': '<rootDir>/spec/__mocks__/svgrMock.tsx',
|
||||
'^src/(.*)$': '<rootDir>/src/$1',
|
||||
'^spec/(.*)$': '<rootDir>/spec/$1',
|
||||
|
||||
92893
superset-frontend/package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "superset",
|
||||
"version": "1.3.2",
|
||||
"version": "1.4.0",
|
||||
"description": "Superset is a data exploration platform designed to be visual, intuitive, and interactive.",
|
||||
"license": "Apache-2.0",
|
||||
"directories": {
|
||||
@@ -12,21 +12,21 @@
|
||||
"test": "cross-env NODE_ENV=test jest",
|
||||
"type": "tsc --noEmit",
|
||||
"cover": "cross-env NODE_ENV=test jest --coverage",
|
||||
"dev": "webpack --mode=development --colors --debug --watch",
|
||||
"dev": "webpack --mode=development --color --watch",
|
||||
"dev-server": "cross-env NODE_ENV=development BABEL_ENV=development node --max_old_space_size=4096 ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --mode=development",
|
||||
"prod": "npm run build",
|
||||
"build-dev": "cross-env NODE_OPTIONS=--max_old_space_size=8192 NODE_ENV=development webpack --mode=development --colors",
|
||||
"build-instrumented": "cross-env NODE_ENV=development BABEL_ENV=instrumented webpack --mode=development --colors",
|
||||
"build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 NODE_ENV=production BABEL_ENV=production webpack --mode=production --colors",
|
||||
"build-dev": "cross-env NODE_OPTIONS=--max_old_space_size=8192 NODE_ENV=development webpack --mode=development --color",
|
||||
"build-instrumented": "cross-env NODE_ENV=production BABEL_ENV=instrumented webpack --mode=production --color",
|
||||
"build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 NODE_ENV=production BABEL_ENV=\"${BABEL_ENV:=production}\" webpack --mode=production --color",
|
||||
"lint": "eslint --ignore-path=.eslintignore --ext .js,.jsx,.ts,.tsx . && npm run type",
|
||||
"prettier-check": "prettier --check '{src,stylesheets}/**/*.{css,less,sass,scss}'",
|
||||
"prettier-check": "prettier --check 'src/**/*.{css,less,sass,scss}'",
|
||||
"lint-fix": "eslint --fix --ignore-path=.eslintignore --ext .js,.jsx,.ts,tsx . && npm run clean-css && npm run type",
|
||||
"clean-css": "prettier --write '{src,stylesheets}/**/*.{css,less,sass,scss}'",
|
||||
"format": "prettier --write './{src,spec,stylesheets,cypress-base}/**/*{.js,.jsx,.ts,.tsx,.css,.less,.scss,.sass}'",
|
||||
"clean-css": "prettier --write 'src/**/*.{css,less,sass,scss}'",
|
||||
"format": "prettier --write './{src,spec,cypress-base}/**/*{.js,.jsx,.ts,.tsx,.css,.less,.scss,.sass}'",
|
||||
"prettier": "npm run format",
|
||||
"check-translation": "prettier --check ../superset/translations/**/LC_MESSAGES/*.json",
|
||||
"clean-translation": "prettier --write ../superset/translations/**/LC_MESSAGES/*.json",
|
||||
"storybook": "cross-env NODE_ENV=development BABEL_ENV=development start-storybook -s ./images -p 6006",
|
||||
"storybook": "cross-env NODE_ENV=development BABEL_ENV=development start-storybook -s ./src/assets/images -p 6006",
|
||||
"build-storybook": "build-storybook"
|
||||
},
|
||||
"repository": {
|
||||
@@ -56,7 +56,7 @@
|
||||
"last 3 edge versions"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^14.15.5",
|
||||
"node": "^16.9.1",
|
||||
"npm": "^7.5.4"
|
||||
},
|
||||
"homepage": "https://superset.apache.org/",
|
||||
@@ -65,37 +65,38 @@
|
||||
"@babel/runtime-corejs3": "^7.12.5",
|
||||
"@data-ui/sparkline": "^0.0.84",
|
||||
"@emotion/babel-preset-css-prop": "^11.2.0",
|
||||
"@emotion/cache": "^11.1.3",
|
||||
"@emotion/react": "^11.1.5",
|
||||
"@superset-ui/chart-controls": "^0.17.84",
|
||||
"@superset-ui/core": "^0.17.81",
|
||||
"@superset-ui/legacy-plugin-chart-calendar": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-chord": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-country-map": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-event-flow": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-force-directed": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-heatmap": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-histogram": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-horizon": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-map-box": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-partition": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-rose": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-sankey": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-sunburst": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-treemap": "^0.17.84",
|
||||
"@superset-ui/legacy-plugin-chart-world-map": "^0.17.84",
|
||||
"@superset-ui/legacy-preset-chart-big-number": "^0.17.84",
|
||||
"@superset-ui/legacy-preset-chart-deckgl": "^0.4.10",
|
||||
"@superset-ui/legacy-preset-chart-nvd3": "^0.17.84",
|
||||
"@superset-ui/plugin-chart-echarts": "^0.17.84",
|
||||
"@superset-ui/plugin-chart-pivot-table": "^0.17.84",
|
||||
"@superset-ui/plugin-chart-table": "^0.17.84",
|
||||
"@superset-ui/plugin-chart-word-cloud": "^0.17.84",
|
||||
"@superset-ui/preset-chart-xy": "^0.17.84",
|
||||
"@emotion/cache": "^11.4.0",
|
||||
"@emotion/react": "^11.4.1",
|
||||
"@emotion/styled": "^11.3.0",
|
||||
"@superset-ui/chart-controls": "^0.18.19",
|
||||
"@superset-ui/core": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-calendar": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-chord": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-country-map": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-event-flow": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-force-directed": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-heatmap": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-histogram": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-horizon": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-map-box": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-paired-t-test": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-partition": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-pivot-table": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-rose": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-sankey": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-sankey-loop": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-sunburst": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-treemap": "^0.18.19",
|
||||
"@superset-ui/legacy-plugin-chart-world-map": "^0.18.19",
|
||||
"@superset-ui/legacy-preset-chart-big-number": "^0.18.19",
|
||||
"@superset-ui/legacy-preset-chart-deckgl": "^0.4.13",
|
||||
"@superset-ui/legacy-preset-chart-nvd3": "^0.18.19",
|
||||
"@superset-ui/plugin-chart-echarts": "^0.18.19",
|
||||
"@superset-ui/plugin-chart-pivot-table": "^0.18.19",
|
||||
"@superset-ui/plugin-chart-table": "^0.18.19",
|
||||
"@superset-ui/plugin-chart-word-cloud": "^0.18.19",
|
||||
"@superset-ui/preset-chart-xy": "^0.18.19",
|
||||
"@vx/responsive": "^0.0.195",
|
||||
"abortcontroller-polyfill": "^1.1.9",
|
||||
"antd": "^4.9.4",
|
||||
@@ -116,9 +117,8 @@
|
||||
"fuse.js": "^6.4.6",
|
||||
"geolib": "^2.0.24",
|
||||
"global-box": "^1.2.0",
|
||||
"html-webpack-plugin": "^4.5.1",
|
||||
"immer": "^8.0.1",
|
||||
"immutable": "^4.0.0-rc.12",
|
||||
"html-webpack-plugin": "^5.3.2",
|
||||
"immer": "^9.0.6",
|
||||
"interweave": "^11.2.0",
|
||||
"jquery": "^3.5.1",
|
||||
"js-levenshtein": "^1.1.6",
|
||||
@@ -128,7 +128,6 @@
|
||||
"lodash": "^4.17.21",
|
||||
"lodash-es": "^4.17.21",
|
||||
"match-sorter": "^6.1.0",
|
||||
"mathjs": "^8.0.1",
|
||||
"memoize-one": "^5.1.1",
|
||||
"moment": "^2.26.0",
|
||||
"moment-timezone": "^0.5.33",
|
||||
@@ -140,13 +139,14 @@
|
||||
"query-string": "^6.13.7",
|
||||
"re-resizable": "^6.6.1",
|
||||
"react": "^16.13.1",
|
||||
"react-ace": "^5.10.0",
|
||||
"react-ace": "^9.4.4",
|
||||
"react-checkbox-tree": "^1.5.1",
|
||||
"react-color": "^2.13.8",
|
||||
"react-datetime": "^3.0.4",
|
||||
"react-dnd": "^11.1.3",
|
||||
"react-dnd-html5-backend": "^11.1.3",
|
||||
"react-dom": "^16.13.0",
|
||||
"react-draggable": "^4.4.3",
|
||||
"react-gravatar": "^2.6.1",
|
||||
"react-hot-loader": "^4.12.20",
|
||||
"react-js-cron": "^1.2.0",
|
||||
@@ -182,7 +182,7 @@
|
||||
"scroll-into-view-if-needed": "^2.2.28",
|
||||
"shortid": "^2.2.6",
|
||||
"urijs": "^1.19.6",
|
||||
"use-immer": "^0.4.2",
|
||||
"use-immer": "^0.6.0",
|
||||
"use-query-params": "^1.1.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -200,15 +200,16 @@
|
||||
"@emotion/jest": "^11.3.0",
|
||||
"@hot-loader/react-dom": "^16.13.0",
|
||||
"@istanbuljs/nyc-config-typescript": "^1.0.1",
|
||||
"@storybook/addon-actions": "^6.1.17",
|
||||
"@storybook/addon-essentials": "^6.1.20",
|
||||
"@storybook/addon-knobs": "^6.1.17",
|
||||
"@storybook/addon-links": "^6.1.17",
|
||||
"@storybook/addons": "^6.1.17",
|
||||
"@storybook/client-api": "^6.1.17",
|
||||
"@storybook/preset-typescript": "^3.0.0",
|
||||
"@storybook/react": "^6.1.20",
|
||||
"@svgr/webpack": "^5.4.0",
|
||||
"@storybook/addon-actions": "^6.3.8",
|
||||
"@storybook/addon-essentials": "^6.3.8",
|
||||
"@storybook/addon-knobs": "^6.3.1",
|
||||
"@storybook/addon-links": "^6.3.8",
|
||||
"@storybook/addons": "^6.3.8",
|
||||
"@storybook/builder-webpack5": "^6.3.8",
|
||||
"@storybook/client-api": "^6.3.8",
|
||||
"@storybook/manager-webpack5": "^6.3.8",
|
||||
"@storybook/react": "^6.3.8",
|
||||
"@svgr/webpack": "^5.5.0",
|
||||
"@testing-library/dom": "^7.29.4",
|
||||
"@testing-library/jest-dom": "^5.11.6",
|
||||
"@testing-library/react": "^11.2.0",
|
||||
@@ -250,20 +251,19 @@
|
||||
"babel-plugin-dynamic-import-node": "^2.3.3",
|
||||
"babel-plugin-jsx-remove-data-test-id": "^2.1.3",
|
||||
"babel-plugin-lodash": "^3.3.4",
|
||||
"cache-loader": "^1.2.2",
|
||||
"clean-webpack-plugin": "^3.0.0",
|
||||
"copy-webpack-plugin": "^6.0.3",
|
||||
"copy-webpack-plugin": "^9.0.1",
|
||||
"cross-env": "^5.2.0",
|
||||
"css-loader": "^1.0.0",
|
||||
"css-loader": "^6.2.0",
|
||||
"css-minimizer-webpack-plugin": "^3.0.2",
|
||||
"enzyme": "^3.10.0",
|
||||
"enzyme-adapter-react-16": "^1.14.0",
|
||||
"eslint": "^7.17.0",
|
||||
"eslint-config-airbnb": "^18.2.1",
|
||||
"eslint-config-prettier": "^7.1.0",
|
||||
"eslint-import-resolver-typescript": "^2.3.0",
|
||||
"eslint-import-resolver-webpack": "^0.13.0",
|
||||
"eslint-import-resolver-typescript": "^2.5.0",
|
||||
"eslint-import-resolver-webpack": "^0.13.1",
|
||||
"eslint-plugin-cypress": "^2.11.2",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-import": "^2.24.2",
|
||||
"eslint-plugin-jest": "^24.1.3",
|
||||
"eslint-plugin-jest-dom": "^3.6.5",
|
||||
"eslint-plugin-jsx-a11y": "^6.4.1",
|
||||
@@ -275,9 +275,9 @@
|
||||
"exports-loader": "^0.7.0",
|
||||
"fetch-mock": "^7.7.3",
|
||||
"file-loader": "^6.0.0",
|
||||
"fork-ts-checker-webpack-plugin": "^0.4.9",
|
||||
"fork-ts-checker-webpack-plugin": "^6.3.3",
|
||||
"ignore-styles": "^5.0.1",
|
||||
"imports-loader": "^0.7.1",
|
||||
"imports-loader": "^3.0.0",
|
||||
"jest": "^26.6.3",
|
||||
"jest-environment-enzyme": "^7.1.2",
|
||||
"jest-enzyme": "^7.1.2",
|
||||
@@ -285,33 +285,31 @@
|
||||
"jsdom": "^16.4.0",
|
||||
"less": "^3.12.2",
|
||||
"less-loader": "^5.0.0",
|
||||
"mini-css-extract-plugin": "^0.4.0",
|
||||
"mini-css-extract-plugin": "^2.3.0",
|
||||
"mock-socket": "^9.0.3",
|
||||
"node-fetch": "^2.6.1",
|
||||
"optimize-css-assets-webpack-plugin": "^5.0.1",
|
||||
"po2json": "^0.4.5",
|
||||
"prettier": "^2.2.1",
|
||||
"process": "^0.11.10",
|
||||
"react-test-renderer": "^16.9.0",
|
||||
"redux-mock-store": "^1.5.4",
|
||||
"sinon": "^9.0.2",
|
||||
"source-map-support": "^0.5.16",
|
||||
"speed-measure-webpack-plugin": "^1.2.3",
|
||||
"storybook-addon-jsx": "^7.3.3",
|
||||
"storybook-addon-paddings": "^3.2.0",
|
||||
"style-loader": "^1.0.0",
|
||||
"terser-webpack-plugin": "^1.1.0",
|
||||
"thread-loader": "^1.2.0",
|
||||
"transform-loader": "^0.2.3",
|
||||
"speed-measure-webpack-plugin": "^1.5.0",
|
||||
"storybook-addon-jsx": "^7.3.14",
|
||||
"storybook-addon-paddings": "^4.2.1",
|
||||
"style-loader": "^3.2.1",
|
||||
"thread-loader": "^3.0.4",
|
||||
"transform-loader": "^0.2.4",
|
||||
"ts-jest": "^26.4.2",
|
||||
"ts-loader": "^8.0.7",
|
||||
"ts-loader": "^9.2.5",
|
||||
"typescript": "^4.1.6",
|
||||
"url-loader": "^1.0.1",
|
||||
"webpack": "^4.42.0",
|
||||
"webpack-bundle-analyzer": "^3.6.1",
|
||||
"webpack-cli": "^3.3.11",
|
||||
"webpack-dev-server": "^3.11.0",
|
||||
"webpack-manifest-plugin": "^2.2.0",
|
||||
"webpack-sources": "^1.4.3",
|
||||
"webpack": "^5.52.1",
|
||||
"webpack-bundle-analyzer": "^4.4.2",
|
||||
"webpack-cli": "^4.8.0",
|
||||
"webpack-dev-server": "^4.2.0",
|
||||
"webpack-manifest-plugin": "^4.0.2",
|
||||
"webpack-sources": "^3.2.0",
|
||||
"yargs": "^15.4.1"
|
||||
},
|
||||
"stylelint": {
|
||||
|
||||
@@ -168,6 +168,7 @@ export default {
|
||||
id,
|
||||
granularity_sqla: [['ds', 'ds']],
|
||||
name: 'birth_names',
|
||||
owners: [{ first_name: 'joe', last_name: 'man', id: 1 }],
|
||||
database: {
|
||||
allow_multi_schema_metadata_fetch: null,
|
||||
name: 'main',
|
||||
|
||||