Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49a6f9bcbe | ||
|
|
5dff290a53 | ||
|
|
d40614e0ab | ||
|
|
5d1b443939 | ||
|
|
442520a535 | ||
|
|
0182457970 | ||
|
|
bee3014c37 | ||
|
|
686c13b6f4 | ||
|
|
6bf409b429 | ||
|
|
a9894304b0 | ||
|
|
c8b707d9b7 | ||
|
|
b4f10b08b1 | ||
|
|
d0784e7094 | ||
|
|
ecc2705074 | ||
|
|
88642067a1 | ||
|
|
5af05976d8 | ||
|
|
83d2e7f903 | ||
|
|
d9565fa489 | ||
|
|
412a71d758 | ||
|
|
f8f5c548c9 | ||
|
|
29d3add866 | ||
|
|
74f953ddd2 | ||
|
|
98c84babb9 | ||
|
|
d7d63bc184 | ||
|
|
04445a3487 | ||
|
|
2842b63cbe | ||
|
|
36608b503e | ||
|
|
2961d69a82 | ||
|
|
6557fb8132 | ||
|
|
43cf0c69ec | ||
|
|
60d1e4e95a | ||
|
|
75a98af64b | ||
|
|
6a1ce6a704 | ||
|
|
be748f35cd | ||
|
|
5eb4e82d27 | ||
|
|
ffc357c6a1 | ||
|
|
3ed70d8f53 | ||
|
|
ef4878b845 | ||
|
|
a49526d984 | ||
|
|
60004f5bf3 | ||
|
|
969f8edc5a | ||
|
|
ae3bb47708 | ||
|
|
eba3929ed1 | ||
|
|
214142f54a | ||
|
|
9c3f40d87c | ||
|
|
9f7db406f1 | ||
|
|
775474366e | ||
|
|
c989a1cbce | ||
|
|
4a27e79001 | ||
|
|
f46121dba9 | ||
|
|
ce26ecbd90 | ||
|
|
c0b57bd1c3 | ||
|
|
d34874cf2b | ||
|
|
e86d4d3c92 | ||
|
|
1283803844 | ||
|
|
effd73f2cc | ||
|
|
69b57016b3 | ||
|
|
3acda145f1 | ||
|
|
f63e66be01 | ||
|
|
649ff4dd61 | ||
|
|
1010294f2b | ||
|
|
a84d86fe26 | ||
|
|
d9a3c3e1dd | ||
|
|
591f266543 | ||
|
|
8f8c435d7c | ||
|
|
b245e66198 | ||
|
|
03b8d8f7f7 | ||
|
|
ae0eb4b8d9 | ||
|
|
8539dfd0ba | ||
|
|
188bb5cab2 | ||
|
|
7884df1ee2 | ||
|
|
cadb732713 | ||
|
|
4d9144eca5 | ||
|
|
cf20b3439c | ||
|
|
b06ab7d8e3 | ||
|
|
6443001cef | ||
|
|
860aa55d00 | ||
|
|
9e154d1a48 | ||
|
|
c900dd0b78 | ||
|
|
add2924ed1 | ||
|
|
9724abf090 | ||
|
|
f8d25612ba | ||
|
|
df79522160 | ||
|
|
80a6e25a98 | ||
|
|
eff4422d04 | ||
|
|
95cb30be4b | ||
|
|
d5b62d8d3e | ||
|
|
90c3e56d32 | ||
|
|
197c6e65ed | ||
|
|
902dafde48 | ||
|
|
6a4043d0f0 | ||
|
|
8e19f59dd2 | ||
|
|
7af82ae87d | ||
|
|
aaa4a7b371 | ||
|
|
14106f7bb2 | ||
|
|
87f2b93023 | ||
|
|
59c0e973a4 | ||
|
|
ee8b22dd29 | ||
|
|
2e17a9e94f | ||
|
|
7fccea1556 | ||
|
|
7ab37d2aae | ||
|
|
820f4b9cf0 | ||
|
|
2d3ff8c0dc | ||
|
|
9387c4c16f | ||
|
|
7ca6d8c880 | ||
|
|
6063f4ff04 | ||
|
|
b2ad74f94f | ||
|
|
8b047a521b | ||
|
|
0b20ace65d | ||
|
|
3fe240742a | ||
|
|
b4621d2f2a | ||
|
|
bc76cd4898 | ||
|
|
01e8231531 | ||
|
|
29f5d4aa41 | ||
|
|
dec241be4e | ||
|
|
b28fc1678e | ||
|
|
ed51b3b59c | ||
|
|
515b49d64a | ||
|
|
2f3bb5b169 | ||
|
|
c947be356c | ||
|
|
03c0d3722e | ||
|
|
785cfa6003 | ||
|
|
fd44943aaf | ||
|
|
602e85620c | ||
|
|
442d70c471 | ||
|
|
bf0d0d538e | ||
|
|
3e70dee89f | ||
|
|
58c0f2cc7d | ||
|
|
3c7a6513e8 | ||
|
|
30d3a96d61 | ||
|
|
8bd47f47cd | ||
|
|
552823f329 | ||
|
|
d385abd13b | ||
|
|
3ec77597bf | ||
|
|
5ca7326fbd | ||
|
|
07ce6b0a52 | ||
|
|
d070cf9257 | ||
|
|
6f27dc8be3 | ||
|
|
94df597107 | ||
|
|
7f9a03bfea | ||
|
|
517991d7bc | ||
|
|
f37b558042 | ||
|
|
76c17261d0 | ||
|
|
471da0d391 | ||
|
|
a59f691610 | ||
|
|
b98d4b43ba | ||
|
|
c186ea33ea | ||
|
|
e36c014290 | ||
|
|
494068b632 | ||
|
|
0f8a3b31d3 | ||
|
|
3daa038f5f | ||
|
|
b2a21f7166 | ||
|
|
a1993566c4 | ||
|
|
ea4e9a6403 | ||
|
|
d3da503edb | ||
|
|
a23825c23c | ||
|
|
ff025b78f3 | ||
|
|
efdeb9df05 | ||
|
|
4c2e818cd3 | ||
|
|
219c4a14b3 | ||
|
|
6d58566779 | ||
|
|
3a6dc1d24e | ||
|
|
db04ea40fb | ||
|
|
77bd7cf1c6 | ||
|
|
3a7d76cece | ||
|
|
dfde2adf27 | ||
|
|
bba1b14bf0 | ||
|
|
300ddaedf9 | ||
|
|
d0ffe9af7c | ||
|
|
6f6c37ec26 | ||
|
|
9ffcd6410e | ||
|
|
a0f0f698f4 | ||
|
|
9432bd88f5 | ||
|
|
77f58fc8fa | ||
|
|
113a8a381c | ||
|
|
9033e72679 | ||
|
|
24e6ec3dca | ||
|
|
6e443ad1eb | ||
|
|
29633e7d8c | ||
|
|
3a0391bbb9 | ||
|
|
f78f33d9aa | ||
|
|
4a0312243d | ||
|
|
863f8bbbcd | ||
|
|
fe9fbadade | ||
|
|
5f5a656835 | ||
|
|
b6d433de32 | ||
|
|
3391e29093 | ||
|
|
5400d30b20 | ||
|
|
39ac45351b | ||
|
|
5bd7fd7990 | ||
|
|
5e85f5c81f | ||
|
|
60abf7e2af | ||
|
|
9d3796828c | ||
|
|
3f9183a162 | ||
|
|
eb65cea971 | ||
|
|
8c32c6da16 | ||
|
|
90a3d685a0 | ||
|
|
9111eb9f30 | ||
|
|
596f5569be | ||
|
|
04f1c356a5 | ||
|
|
84ac72f550 | ||
|
|
6a3db35bb2 | ||
|
|
eb4b41233b | ||
|
|
aafb54d042 | ||
|
|
8450cca998 | ||
|
|
9c96519b67 | ||
|
|
51172ca1aa | ||
|
|
38f5e4d490 | ||
|
|
aa3c3c5aaa | ||
|
|
8437a235c9 | ||
|
|
67468c46c0 | ||
|
|
429e2a33c3 | ||
|
|
334e15997f | ||
|
|
578a899152 | ||
|
|
46e677823e | ||
|
|
3a6fe9f105 | ||
|
|
5df544b6fb | ||
|
|
136ad0ef4f | ||
|
|
1fbc762efa | ||
|
|
577565cd82 | ||
|
|
2ac28927a3 | ||
|
|
fca5b829df | ||
|
|
005cf5947b | ||
|
|
dbed64a2c6 | ||
|
|
07e5fe8a66 | ||
|
|
05d7060d83 | ||
|
|
d2adc858cb | ||
|
|
88fb342887 | ||
|
|
b4a35e624b | ||
|
|
3a04ac7720 | ||
|
|
f30f685eb5 | ||
|
|
39c6488463 | ||
|
|
f68dd8293f | ||
|
|
bf5b18ccb1 | ||
|
|
c8e69e2f9d | ||
|
|
4d4b19e8ba | ||
|
|
d2cce51ddf | ||
|
|
56fa2b29d3 | ||
|
|
386d4e0541 | ||
|
|
b287ca7f5b | ||
|
|
86304ab171 | ||
|
|
0b477e3f7c | ||
|
|
3ab27c6ec9 | ||
|
|
248586de6e | ||
|
|
fccde379b8 | ||
|
|
8644b1a319 | ||
|
|
b7a9c220e1 | ||
|
|
cdbbd83705 | ||
|
|
c033ca959d | ||
|
|
1b9e4ff9ab | ||
|
|
b2ea97a984 | ||
|
|
f405ba033e | ||
|
|
4f00404805 | ||
|
|
df0f663382 | ||
|
|
cff473f825 | ||
|
|
79be126189 | ||
|
|
d00c17dde2 | ||
|
|
f1a6b2f852 | ||
|
|
ee308fbc64 | ||
|
|
6a5a765689 | ||
|
|
ea1a96e8e1 | ||
|
|
a27a0df1a4 | ||
|
|
b9aaf0fc05 | ||
|
|
af58784040 | ||
|
|
7223633da6 | ||
|
|
0d2e85517c | ||
|
|
9a13ec6d5f | ||
|
|
f3b0706507 | ||
|
|
6447529ee4 | ||
|
|
849ca64ba8 | ||
|
|
91a8b69d36 | ||
|
|
d20f96f8d0 | ||
|
|
4fc2758e6a | ||
|
|
aad67e43db | ||
|
|
57d61df44d | ||
|
|
07bcfa9b5f | ||
|
|
984c278c4c | ||
|
|
b1f521263d | ||
|
|
fef82789b1 | ||
|
|
6359086779 | ||
|
|
2b88225ee1 | ||
|
|
843c7ab58a | ||
|
|
260d561b9a | ||
|
|
630734b908 | ||
|
|
bd8951e958 | ||
|
|
97121465dd | ||
|
|
07551dc3d4 | ||
|
|
68e5e1afea | ||
|
|
f934278fef | ||
|
|
25a737e83c | ||
|
|
9452664079 | ||
|
|
adb86d35ec | ||
|
|
f99c874962 | ||
|
|
fbc66a8177 | ||
|
|
b5e7e707b3 | ||
|
|
1af5fbbd6a | ||
|
|
bba7763825 | ||
|
|
dd58b31cc4 | ||
|
|
e7797b65d1 | ||
|
|
e2bfb1216b | ||
|
|
628cd345f2 | ||
|
|
e1d73d5420 | ||
|
|
92ac6b2c15 | ||
|
|
8d73ab9955 | ||
|
|
411dba240b | ||
|
|
2499a1cf5a | ||
|
|
5942d8bf68 | ||
|
|
bece2ea3e4 | ||
|
|
326ac4a6c4 | ||
|
|
e7a1876807 | ||
|
|
5fccf67cdc | ||
|
|
210f1f8f95 | ||
|
|
97d89d7340 | ||
|
|
7f0c3b20ad | ||
|
|
d20b60edd4 | ||
|
|
aee94b39ba | ||
|
|
63b8172321 | ||
|
|
f22ae2dc51 | ||
|
|
5e1c4057a0 | ||
|
|
f18fb24b3d | ||
|
|
f6ba75a185 | ||
|
|
6b7761ecf2 | ||
|
|
007d22199d | ||
|
|
5def416f63 | ||
|
|
99d4f8931a | ||
|
|
6d8424c104 | ||
|
|
8d8e1bb637 | ||
|
|
943696a87f | ||
|
|
3bff1a00b6 | ||
|
|
c3249dd97d | ||
|
|
b430b5a172 | ||
|
|
d95c200e69 | ||
|
|
478ca904ae | ||
|
|
84a894c2c7 | ||
|
|
b6fb36f22b | ||
|
|
83b7fa92af | ||
|
|
33d8078a83 | ||
|
|
581d3c7108 | ||
|
|
10205d0b50 | ||
|
|
a698587e8c | ||
|
|
2bd611916d | ||
|
|
90e210892b | ||
|
|
e03691917b | ||
|
|
784a478268 | ||
|
|
458be8c848 | ||
|
|
b0da5cef70 | ||
|
|
6f92007a85 | ||
|
|
4402f5c5cd | ||
|
|
a97bf6494e | ||
|
|
cdb18e04ff | ||
|
|
06ffcd29e2 | ||
|
|
1d0b86ae94 | ||
|
|
80caba3fd1 | ||
|
|
3ee22667a7 | ||
|
|
d6fde3cdd5 | ||
|
|
5e5a9c601f | ||
|
|
268c1dcdad | ||
|
|
887be5dd32 | ||
|
|
7536dd12cd | ||
|
|
30cd422331 | ||
|
|
fb35bac070 | ||
|
|
916f7bcbba | ||
|
|
80cf710dbe | ||
|
|
60e1526f6a | ||
|
|
ae619b169c | ||
|
|
24a2213445 | ||
|
|
d619078d25 | ||
|
|
8061d5cce9 | ||
|
|
ff8bc3c426 | ||
|
|
c3f3ec56d6 | ||
|
|
508721bd97 | ||
|
|
5690946b1a | ||
|
|
b58cc24bd4 | ||
|
|
aaf7d6b7e4 | ||
|
|
6ace22da87 | ||
|
|
a3686459a9 | ||
|
|
a249e418b3 | ||
|
|
f265b2c1ae | ||
|
|
e1eb985aa8 | ||
|
|
3f28eebb20 | ||
|
|
1e37f0b417 | ||
|
|
2177a50c7a | ||
|
|
1eba7121aa | ||
|
|
d2f511abba | ||
|
|
8737a8a546 | ||
|
|
7804d1451e | ||
|
|
ae703b48fc | ||
|
|
5e6d05b3fd | ||
|
|
0f01d9b08f | ||
|
|
74dbada473 | ||
|
|
5659c87ed2 | ||
|
|
ed14f36c55 | ||
|
|
bda43ac0f6 | ||
|
|
2a2bc82a8b | ||
|
|
c7f8d11a7e | ||
|
|
cee8532733 | ||
|
|
e2fe967788 | ||
|
|
27a06f57e1 | ||
|
|
419d122816 | ||
|
|
861ee8b3c6 | ||
|
|
e4173d90c8 | ||
|
|
cbbf2bed6e | ||
|
|
4aef771072 | ||
|
|
ed87470bcc | ||
|
|
4ac8f826f2 | ||
|
|
9972ac6908 | ||
|
|
8fb0c8da56 | ||
|
|
75a7431379 | ||
|
|
ee23690196 | ||
|
|
def7cd1b89 | ||
|
|
505678b37b | ||
|
|
39ad3226c7 | ||
|
|
dfff3c1cba | ||
|
|
da42bf2dbb | ||
|
|
07796b7528 | ||
|
|
e29e2684d0 | ||
|
|
bac5a85541 | ||
|
|
1d37f3a15b | ||
|
|
4e94fc4cff | ||
|
|
e7cdfeeb2c | ||
|
|
26498fc099 | ||
|
|
be82657940 | ||
|
|
dc06fb8b11 | ||
|
|
8b32b2abd3 | ||
|
|
a27a809f07 | ||
|
|
32e37d8cda | ||
|
|
16cc089b19 | ||
|
|
deef3b04eb | ||
|
|
150e5c90f7 | ||
|
|
f473d13d0d | ||
|
|
cb963585ad | ||
|
|
1991d240bf | ||
|
|
51c56dd2a0 | ||
|
|
e58a3aba54 | ||
|
|
18a1c8d7d8 | ||
|
|
a0a0d8043f | ||
|
|
8c6bd4ef04 | ||
|
|
99f79f5143 | ||
|
|
56f74e5215 | ||
|
|
e8783033f8 | ||
|
|
5054b9fade | ||
|
|
9074f72959 | ||
|
|
b370c66308 | ||
|
|
4a01b6006c | ||
|
|
bfcca8cbab | ||
|
|
59fc5a6184 | ||
|
|
a520124a78 | ||
|
|
003001f19f | ||
|
|
e56e0de458 | ||
|
|
ef1807cd7e | ||
|
|
2dc5c5f53f | ||
|
|
62bffaf935 | ||
|
|
63964bb520 | ||
|
|
b97f8f03ac | ||
|
|
f556ef53f3 | ||
|
|
be3714e131 | ||
|
|
d0f2c5581d | ||
|
|
1f20214244 | ||
|
|
52f631a038 | ||
|
|
eb9cd2a2a5 | ||
|
|
3f85239053 | ||
|
|
cef68f8a9a | ||
|
|
050543ae1b | ||
|
|
a6d0e6f37a | ||
|
|
d1ba4dc284 | ||
|
|
593daac614 | ||
|
|
549abb542b | ||
|
|
512fb9a0bd | ||
|
|
42d0474cc2 | ||
|
|
e0a7488005 | ||
|
|
178607093f | ||
|
|
58fcd292a9 | ||
|
|
17792a507c | ||
|
|
0c40bea064 | ||
|
|
89b05993a3 | ||
|
|
4532079c71 | ||
|
|
dcfebfce9d | ||
|
|
34f99708d4 | ||
|
|
c81c60c91f | ||
|
|
50b0816e37 | ||
|
|
1fb2c62c02 | ||
|
|
5ab1e7eae4 | ||
|
|
af661ceee2 | ||
|
|
87c8e872ee | ||
|
|
ba541e8022 | ||
|
|
b92957e510 | ||
|
|
dab18250d7 | ||
|
|
ff95d0face | ||
|
|
53013395d7 | ||
|
|
3e63c82ecc | ||
|
|
dbe0838f8f | ||
|
|
e3244e9056 | ||
|
|
7a88ad3c02 | ||
|
|
23996b59a1 | ||
|
|
789e6b76ae | ||
|
|
c52c206d05 | ||
|
|
db7f5fed31 | ||
|
|
36ed617090 | ||
|
|
0d0a81c0d2 | ||
|
|
8553b06155 | ||
|
|
6aed5887e5 | ||
|
|
b33d152a5b | ||
|
|
e36e0fdf25 | ||
|
|
a14fcc95e7 | ||
|
|
ddde178e3b | ||
|
|
85251f8cae | ||
|
|
0cebffd59a | ||
|
|
7eab59af51 | ||
|
|
0735680674 | ||
|
|
3e0c70d018 | ||
|
|
041197b6df | ||
|
|
b9b557a761 | ||
|
|
e83a76a586 | ||
|
|
7cf96cd843 | ||
|
|
1a759ce56d | ||
|
|
11b49a6ceb | ||
|
|
a0eeb4d767 | ||
|
|
ba5e2f634a | ||
|
|
f0080f9c55 | ||
|
|
463962a58b | ||
|
|
1716b9f8f6 | ||
|
|
a4d8f36863 | ||
|
|
40ba3c2d57 | ||
|
|
893b45feef | ||
|
|
296ff17f19 | ||
|
|
52eba11d6a | ||
|
|
f6ce40d246 | ||
|
|
d76ff39766 | ||
|
|
e1a91e2228 | ||
|
|
0c083bdc1a | ||
|
|
9bd97ef4f2 | ||
|
|
5ebcd2a5f6 | ||
|
|
5b3910db97 | ||
|
|
16f31f8090 | ||
|
|
515452c7e2 | ||
|
|
a971a28a34 | ||
|
|
7aaae06c9d | ||
|
|
b722a95bab | ||
|
|
f672d5da5c | ||
|
|
a724850c84 | ||
|
|
5cc0feb647 | ||
|
|
090ae64dfa | ||
|
|
6e799e37f4 | ||
|
|
fba66c6250 | ||
|
|
c8c94825ce | ||
|
|
e11012d426 | ||
|
|
d54e827bb9 | ||
|
|
4ddd56f788 | ||
|
|
06c0a5bba9 | ||
|
|
52faa2e17d | ||
|
|
78cbdc3e42 | ||
|
|
14c324950a | ||
|
|
467e062e8e | ||
|
|
ec61910232 | ||
|
|
bb002d6147 | ||
|
|
e1ddba9c0f | ||
|
|
426aa777fb | ||
|
|
8eff5a75b4 | ||
|
|
a747eaa740 | ||
|
|
a9512c1eef | ||
|
|
242921bb4c | ||
|
|
55ac01b675 | ||
|
|
baf713aad5 | ||
|
|
37742c40ca | ||
|
|
83fc553841 | ||
|
|
ea21e800a7 | ||
|
|
894f250229 | ||
|
|
6f4e63162f | ||
|
|
0668d12e3b | ||
|
|
710e111c5e | ||
|
|
33624289fe | ||
|
|
0e17e4b06f | ||
|
|
09e9cb484b | ||
|
|
749274e635 | ||
|
|
cfda30c81a | ||
|
|
47518cb002 | ||
|
|
2f68010729 | ||
|
|
8be8014504 | ||
|
|
2d4de5146b | ||
|
|
a40e9a4d06 | ||
|
|
251ce2ed2a | ||
|
|
78b8e9421e | ||
|
|
e605d6dddf | ||
|
|
d8496425e2 | ||
|
|
d0305445b2 | ||
|
|
f2523b26fa | ||
|
|
8b2a408dea | ||
|
|
e391a1b49e | ||
|
|
aea916782d | ||
|
|
1f5cec94bd | ||
|
|
2c4629a77d | ||
|
|
bbfaeb074e | ||
|
|
de9515c294 | ||
|
|
06bf44a823 | ||
|
|
321d968504 | ||
|
|
62f9e54c8f | ||
|
|
0b780d55bb | ||
|
|
15d6508407 | ||
|
|
e18294463e | ||
|
|
1144ac15c9 | ||
|
|
9df1b26654 | ||
|
|
846c79ef55 | ||
|
|
eeecd59c9d | ||
|
|
66e2807009 | ||
|
|
067bfbf950 | ||
|
|
46a0a6e08a | ||
|
|
00550d7c02 | ||
|
|
e642361399 | ||
|
|
29355577f1 | ||
|
|
e585db85b6 | ||
|
|
72150ebadf | ||
|
|
e4b54c3c01 | ||
|
|
da89feeb16 | ||
|
|
7d418f3dce | ||
|
|
2b8d8da22a | ||
|
|
b240b795b5 | ||
|
|
b5bac6c876 | ||
|
|
4c4fedc452 | ||
|
|
fcd045f84a | ||
|
|
c2a21d2da0 | ||
|
|
69fb309ec3 | ||
|
|
5168475826 | ||
|
|
da172bf8cf | ||
|
|
b3424266cd | ||
|
|
04bb73cf27 | ||
|
|
7402379346 | ||
|
|
4d9e9a4b1c | ||
|
|
6ac906f388 | ||
|
|
f584c8462b | ||
|
|
8d3340045c | ||
|
|
63f24ea57e | ||
|
|
60c2ac3268 | ||
|
|
0d5be8e3f6 | ||
|
|
3630d6844c | ||
|
|
80fcbfab7c | ||
|
|
adaab3550c | ||
|
|
0dadf06245 | ||
|
|
a9efd4b2e3 | ||
|
|
c92a975e4b | ||
|
|
60889d27ed | ||
|
|
7317d9c0b2 | ||
|
|
6975084ea5 | ||
|
|
c7a3bf0f4b | ||
|
|
eaa86d89e9 | ||
|
|
b339613844 | ||
|
|
5e56871fd9 | ||
|
|
969cd664cb | ||
|
|
66eabc253f | ||
|
|
357986103b | ||
|
|
6b660c86a4 | ||
|
|
bbf0aaec5d | ||
|
|
0be1754666 | ||
|
|
3f93755be2 | ||
|
|
52c7186b56 | ||
|
|
b428b06217 | ||
|
|
258e56285a | ||
|
|
4a59a265fb | ||
|
|
62cbc0c95c | ||
|
|
35eb66a322 | ||
|
|
712e1f760c | ||
|
|
269c99293f | ||
|
|
10abb68288 | ||
|
|
2eb0a255d9 | ||
|
|
bc1c5c2f84 | ||
|
|
48fdc8103a | ||
|
|
2b63577046 | ||
|
|
f94dc49fd0 | ||
|
|
0a8881b3c1 | ||
|
|
155cf54c15 | ||
|
|
025e4d4772 | ||
|
|
cacad56172 | ||
|
|
0879b9215c | ||
|
|
12f2b0f8e7 | ||
|
|
55eaa25216 | ||
|
|
be11556799 | ||
|
|
a44c99899a | ||
|
|
ed0d288ccd | ||
|
|
a3d72e0ec7 | ||
|
|
b54b4e5e9b | ||
|
|
b96a30e8a4 | ||
|
|
b621ee92c9 | ||
|
|
a1e32dbfa6 | ||
|
|
7b56c27383 | ||
|
|
9703490129 | ||
|
|
4bc46003b5 | ||
|
|
f5ed4072e4 | ||
|
|
6f24a4e7a8 | ||
|
|
aca006f38b | ||
|
|
41ca4a00b9 | ||
|
|
ce65a3b9cd | ||
|
|
bcd24936bc | ||
|
|
55014bf58b | ||
|
|
94c595093b | ||
|
|
284c12697b | ||
|
|
764f0f79ca | ||
|
|
9c54280d85 | ||
|
|
f6c3f0cbbb | ||
|
|
34586648a5 | ||
|
|
cdf5652e5f | ||
|
|
5522facdc6 | ||
|
|
ec9e9a46f2 | ||
|
|
81bf2f01e2 | ||
|
|
340bfd88ae | ||
|
|
eb7c14561e | ||
|
|
85a7d5cb3e | ||
|
|
3b81538e02 | ||
|
|
569d07db23 | ||
|
|
f7e3b8b9f4 | ||
|
|
07992c11e7 | ||
|
|
7397ab36f2 | ||
|
|
9f7f2c60d6 | ||
|
|
8d1fd269e0 | ||
|
|
d23b20ea75 | ||
|
|
554ef07eed | ||
|
|
868f55372f | ||
|
|
7edcbc974c | ||
|
|
031e660506 | ||
|
|
6ff7fae0b0 | ||
|
|
aee2695413 | ||
|
|
371bffbfea | ||
|
|
f05638ba84 | ||
|
|
cfadbeb353 | ||
|
|
b71541fb7f | ||
|
|
bf1b1a4c46 | ||
|
|
f7e76d02b7 | ||
|
|
1a9c559a8f | ||
|
|
434db0d686 | ||
|
|
44e4fb1090 | ||
|
|
1c5971d3af | ||
|
|
ea17dd637c | ||
|
|
7f9b0380e0 | ||
|
|
14a27b1ba3 | ||
|
|
5f103072b0 | ||
|
|
77889b29fb | ||
|
|
caffe3cb1f | ||
|
|
64ced60f62 | ||
|
|
e2d5046bb7 | ||
|
|
5bb8e0da89 | ||
|
|
a50c43e0fa | ||
|
|
7cd317fe2e | ||
|
|
a1396d00aa | ||
|
|
7e26dc8c5b | ||
|
|
3b46511439 | ||
|
|
d26ea980ac | ||
|
|
ba508a786c | ||
|
|
e5d626c304 | ||
|
|
4b1f1d49d6 | ||
|
|
77505173ae | ||
|
|
83ad291053 | ||
|
|
d1eb9ea982 | ||
|
|
af4a35741c | ||
|
|
165afee55a | ||
|
|
a9c4472d25 | ||
|
|
ff7c1528db | ||
|
|
761fec2574 | ||
|
|
4a81284056 | ||
|
|
fc89718d48 | ||
|
|
c17accc0b4 | ||
|
|
c43674e8f3 | ||
|
|
6089b5fdae | ||
|
|
b8a3eeffdb | ||
|
|
0631a8086c | ||
|
|
e06004292a | ||
|
|
f856ba246e | ||
|
|
abb8e28e49 | ||
|
|
e210da963d | ||
|
|
d642288092 | ||
|
|
a80ec15f4c | ||
|
|
ac19f58cf6 | ||
|
|
341b8d41c5 | ||
|
|
22a0fe555c | ||
|
|
9b6ed315f8 | ||
|
|
7675e0db10 | ||
|
|
b2831b419e | ||
|
|
df106aa708 | ||
|
|
91e6f5cb9f | ||
|
|
05e724f3d7 | ||
|
|
317aa989c2 | ||
|
|
4086514fa5 | ||
|
|
d1d5ff6f9f | ||
|
|
cb9b865a53 | ||
|
|
1a9724582f | ||
|
|
5878c117f2 | ||
|
|
2d58dddbdc | ||
|
|
5f49e0fdd0 | ||
|
|
837e3c55ca | ||
|
|
4c5ada421c | ||
|
|
2b0ffb01b6 | ||
|
|
11bb8c35b0 | ||
|
|
b7dcc9f7e3 | ||
|
|
2785b8f11e | ||
|
|
068864b9ea | ||
|
|
aa01b51177 | ||
|
|
1b5a6790f0 | ||
|
|
9c6d53567c | ||
|
|
0328dd2704 | ||
|
|
65fb8e10ba | ||
|
|
ca68250adf | ||
|
|
9844b15e07 | ||
|
|
a3db5844f0 | ||
|
|
146b5c839c | ||
|
|
6e59f11f4c | ||
|
|
a156816064 | ||
|
|
6ae6fc60f8 | ||
|
|
767afef398 | ||
|
|
6b7b3ab069 | ||
|
|
abf31ad3dc | ||
|
|
8230ac7b4a | ||
|
|
462418ba82 | ||
|
|
ea968e47cc | ||
|
|
88418fc609 | ||
|
|
1473d97055 | ||
|
|
ae00489779 | ||
|
|
b4d08aecdb | ||
|
|
ca8c8d2ad3 | ||
|
|
7aa9f35808 | ||
|
|
057539037b | ||
|
|
8c6f5fe1d3 | ||
|
|
2d2a76a8ac | ||
|
|
cbf39650d0 | ||
|
|
7476f7af73 | ||
|
|
4caf33b41d | ||
|
|
2e4d9f2e2a | ||
|
|
bbffc4c1f8 | ||
|
|
0efb88479e | ||
|
|
65291a00c6 | ||
|
|
117435f0d8 | ||
|
|
7b957369fc | ||
|
|
fbe49c21a2 | ||
|
|
294e522c09 | ||
|
|
4881328fbf | ||
|
|
e6e8276a20 | ||
|
|
fe2c14ff3a | ||
|
|
b809815436 | ||
|
|
d2489c5ac7 | ||
|
|
fe9b0bf29b | ||
|
|
5097688e6c | ||
|
|
6e2c5e0af4 | ||
|
|
c53b249998 | ||
|
|
d74d7eca23 | ||
|
|
c573cfcd12 | ||
|
|
a6e749da87 | ||
|
|
781a20423a | ||
|
|
572562719e | ||
|
|
93ba4ade09 | ||
|
|
333a5a6fef | ||
|
|
3f6920a4ad | ||
|
|
ec2007577b | ||
|
|
6657353bca | ||
|
|
d041648ad4 | ||
|
|
64d728f80f | ||
|
|
7409289762 | ||
|
|
52ab974bff | ||
|
|
ce96deb331 | ||
|
|
7081a0e73d | ||
|
|
383dac6a5e | ||
|
|
0836000f9f | ||
|
|
04ae259f3d | ||
|
|
a4880cabd4 | ||
|
|
226c7f807d | ||
|
|
946aacc12e |
@@ -24,6 +24,6 @@
|
||||
|
||||
/superset-frontend/cypress-base/ @jinghua-qa @geido @eschutho @rusackas @betodealmeida
|
||||
|
||||
# Notify PMC members of changes to Github Actions
|
||||
# Notify PMC members of changes to GitHub Actions
|
||||
|
||||
/.github/ @villebro @geido @eschutho @rusackas @betodealmeida @nytai @mistercrunch @craig-rueda @john-bodley @kgabryje
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: "Create a report to help us improve Superset's stability! For feature requests please open a discussion [here](https://github.com/apache/superset/discussions/categories/ideas)."
|
||||
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.
|
||||
|
||||
### Actual results
|
||||
|
||||
what actually happens.
|
||||
|
||||
#### Screenshots
|
||||
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
|
||||
### Environment
|
||||
|
||||
(please complete the following information):
|
||||
|
||||
- browser type and version:
|
||||
- superset version: `superset version`
|
||||
- python version: `python --version`
|
||||
- node.js version: `node -v`
|
||||
- any feature flags active:
|
||||
|
||||
### Checklist
|
||||
|
||||
Make sure to follow these steps before submitting your issue - thank you!
|
||||
|
||||
- [ ] I have checked the superset logs for python stacktraces and included it here as text if there are any.
|
||||
- [ ] I have reproduced the issue with at least the latest released version of superset.
|
||||
- [ ] I have checked the issue tracker for the same issue and I haven't found one similar.
|
||||
|
||||
### Additional context
|
||||
|
||||
Add any other context about the problem here.
|
||||
@@ -0,0 +1,103 @@
|
||||
name: Bug report
|
||||
description: Report a bug to improve Superset's stability
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Hello Superset Community member! Please keep things tidy by putting your post in the proper place:
|
||||
|
||||
🐛 Reporting a bug: use this form.
|
||||
🙏 Asking a question or getting help: post in the [Superset Slack chat](http://bit.ly/join-superset-slack) or [GitHub Discussions](https://github.com/apache/superset/discussions) under "Q&A / Help".
|
||||
💡 Requesting a new feature: Search [GitHub Discussions](https://github.com/apache/superset/discussions) to see if it exists already. If not, add a new post there under "Ideas".
|
||||
- type: textarea
|
||||
id: bug-description
|
||||
attributes:
|
||||
label: Bug description
|
||||
description: A clear and concise description of what the bug is.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: repro-steps
|
||||
attributes:
|
||||
label: How to reproduce the bug
|
||||
placeholder: |
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots-recordings
|
||||
attributes:
|
||||
label: Screenshots/recordings
|
||||
description: If applicable, add screenshots or recordings to help explain your problem.
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### Environment
|
||||
|
||||
Please specify your environment. If your environment does not match the alternatives, you need to upgrade your environment before submitting the issue as it may have already been fixed. For additional information about the releases, see [Release Process](https://github.com/apache/superset/wiki/Release-Process).
|
||||
- type: dropdown
|
||||
id: superset-version
|
||||
attributes:
|
||||
label: Superset version
|
||||
options:
|
||||
- master / latest-dev
|
||||
- "3.1.0"
|
||||
- "3.0.3"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: python-version
|
||||
attributes:
|
||||
label: Python version
|
||||
options:
|
||||
- "3.9"
|
||||
- "3.10"
|
||||
- "3.11"
|
||||
- Not applicable
|
||||
- I don't know
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: node-version
|
||||
attributes:
|
||||
label: Node version
|
||||
options:
|
||||
- "16"
|
||||
- "17"
|
||||
- "18 or greater"
|
||||
- Not applicable
|
||||
- I don't know
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: browser
|
||||
attributes:
|
||||
label: Browser
|
||||
options:
|
||||
- Chrome
|
||||
- Firefox
|
||||
- Safari
|
||||
- Not applicable
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: |
|
||||
Add any other context about the problem here such as the feature flags that you have enabled, any customizations you have made, the data source you are querying, etc.
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
description: Make sure to follow these steps before submitting your issue - thank you!
|
||||
options:
|
||||
- label: I have searched Superset docs and Slack and didn't find a solution to my problem.
|
||||
- label: I have searched the GitHub issue tracker and didn't find a similar bug report.
|
||||
- label: I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section.
|
||||
validations:
|
||||
required: true
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Feature Request
|
||||
url: https://github.com/apache/superset/discussions/new?category=ideas
|
||||
about: Propose a feature request to the Superset community
|
||||
- name: Q&A
|
||||
url: https://github.com/apache/superset/discussions/new?category=q-a-help
|
||||
about: Open a community Q&A thread on GitHub Discussions
|
||||
- name: Slack
|
||||
url: https://bit.ly/join-superset-slack
|
||||
about: Join the Superset Community on Slack for other discussions and assistance
|
||||
@@ -1,13 +1,13 @@
|
||||
---
|
||||
name: SIP
|
||||
about: "Superset Improvement Proposal. See [here](https://github.com/apache/superset/issues/5602) for details."
|
||||
about: "Superset Improvement Proposal. See SIP-0 (https://github.com/apache/superset/issues/5602) for details. A SIP introduces any major change into Apache Superset's code or process."
|
||||
labels: sip
|
||||
title: "[SIP] Your Title Here (do not add SIP number)"
|
||||
asignees: "apache/superset-committers"
|
||||
assignees: "apache/superset-committers"
|
||||
---
|
||||
|
||||
*Please make sure you are familiar with the SIP process documented*
|
||||
(here)[https://github.com/apache/superset/issues/5602]. The SIP will be numbered by a committer upon acceptance.
|
||||
[here](https://github.com/apache/superset/issues/5602). The SIP will be numbered by a committer upon acceptance.
|
||||
|
||||
## [SIP] Proposal for ...<title>
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# Security Policy
|
||||
|
||||
This is a project of the [Apache Software Foundation](https://apache.org) and follows the
|
||||
ASF [vulnerability handling process](https://apache.org/security/#vulnerability-handling).
|
||||
|
||||
## Reporting Vulnerabilities
|
||||
|
||||
**⚠️ Please do not file GitHub issues for security vulnerabilities as they are public! ⚠️**
|
||||
|
||||
|
||||
Apache Software Foundation takes a rigorous standpoint in annihilating the security issues
|
||||
in its software projects. Apache Superset is highly sensitive and forthcoming to issues
|
||||
pertaining to its features and functionality.
|
||||
If you have any concern or believe you have found a vulnerability in Apache Superset,
|
||||
please get in touch with the Apache Superset Security Team privately at
|
||||
e-mail address [security@superset.apache.org](mailto:security@superset.apache.org).
|
||||
|
||||
More details can be found on the ASF website at
|
||||
[ASF vulnerability reporting process](https://apache.org/security/#reporting-a-vulnerability)
|
||||
|
||||
We kindly ask you to include the following information in your report:
|
||||
- Apache Superset version that you are using
|
||||
- A sanitized copy of your `superset_config.py` file or any config overrides
|
||||
- Detailed steps to reproduce the vulnerability
|
||||
|
||||
Note that Apache Superset is not responsible for any third-party dependencies that may
|
||||
have security issues. Any vulnerabilities found in third-party dependencies should be
|
||||
reported to the maintainers of those projects. Results from security scans of Apache
|
||||
Superset dependencies found on its official Docker image can be remediated at release time
|
||||
by extending the image itself.
|
||||
|
||||
**Your responsible disclosure and collaboration are invaluable.**
|
||||
|
||||
## Extra Information
|
||||
|
||||
- [Apache Superset documentation](https://superset.apache.org/docs/security)
|
||||
- [Common Vulnerabilities and Exposures by release](https://superset.apache.org/docs/security/cves)
|
||||
- [How Security Vulnerabilities are Reported & Handled in Apache Superset (Blog)](https://preset.io/blog/how-security-vulnerabilities-are-reported-and-handled-in-apache-superset/)
|
||||
@@ -3,38 +3,40 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
open-pull-requests-limit: 30
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "pip"
|
||||
directory: "/requirements/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- pip
|
||||
- dependabot
|
||||
open-pull-requests-limit: 30
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: ".github/actions"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
open-pull-requests-limit: 0
|
||||
interval: "weekly"
|
||||
open-pull-requests-limit: 10
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/docs/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
open-pull-requests-limit: 0
|
||||
interval: "weekly"
|
||||
open-pull-requests-limit: 10
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-websocket/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
@@ -43,8 +45,330 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-websocket/utils/client-ws-app/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
open-pull-requests-limit: 10
|
||||
versioning-strategy: increase
|
||||
|
||||
# Now for all of our plugins and packages!
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-calendar/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-histogram/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-partition/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-world-map/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-pivot-table/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-chord/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-horizon/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-rose/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-preset-chart-deckgl/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-table/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-country-map/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-map-box/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sankey/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-preset-chart-nvd3/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-word-cloud/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-event-flow/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sankey-loop/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-echarts/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/preset-chart-xy/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-heatmap/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-parallel-coordinates/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/legacy-plugin-chart-sunburst/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/plugins/plugin-chart-handlebars/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/generator-superset/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/superset-ui-chart-controls/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/superset-ui-core/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/superset-ui-demo/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/superset-frontend/packages/superset-ui-switchboard/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- npm
|
||||
- dependabot
|
||||
- plugins
|
||||
open-pull-requests-limit: 5
|
||||
versioning-strategy: increase
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# .github/workflows/chromatic.yml
|
||||
# seee https://www.chromatic.com/docs/github-actions
|
||||
# see https://www.chromatic.com/docs/github-actions
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
|
||||
@@ -174,7 +174,7 @@ cat << EOF
|
||||
|
||||
-c Move discovered coverage reports to the trash
|
||||
-z FILE Upload specified file directly to Codecov and bypass all report generation.
|
||||
This is inteded to be used only with a pre-formatted Codecov report and is not
|
||||
This is intended to be used only with a pre-formatted Codecov report and is not
|
||||
expected to work under any other circumstances.
|
||||
-Z Exit with 1 if not successful. Default will Exit with 0
|
||||
|
||||
@@ -1152,7 +1152,7 @@ fi
|
||||
|
||||
if [ "$ft_search" = "1" ];
|
||||
then
|
||||
# detect bower comoponents location
|
||||
# detect bower components location
|
||||
bower_components="bower_components"
|
||||
bower_rc=$(cd "$git_root" && cat .bowerrc 2>/dev/null || echo "")
|
||||
if [ "$bower_rc" != "" ];
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# Source repository: https://github.com/actions/dependency-review-action
|
||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
||||
name: 'Dependency Review'
|
||||
name: "Dependency Review"
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
@@ -14,12 +14,12 @@ jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
- name: "Checkout Repository"
|
||||
uses: actions/checkout@v3
|
||||
- name: 'Dependency Review'
|
||||
- name: "Dependency Review"
|
||||
uses: actions/dependency-review-action@v2
|
||||
with:
|
||||
fail-on-severity: high
|
||||
fail-on-severity: critical
|
||||
# compatible/incompatible licenses addressed here: https://www.apache.org/legal/resolved.html
|
||||
# find SPDX identifiers here: https://spdx.org/licenses/
|
||||
deny-licenses: MS-LPL, BUSL-1.1, QPL-1.0, Sleepycat, SSPL-1.0, CPOL-1.02, AGPL-3.0, GPL-1.0+, BSD-4-Clause-UC, NPL-1.0, NPL-1.1, JSON
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
name: Push ephemeral env image
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Docker"]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
- name: "Check for secrets"
|
||||
id: check
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -n "${{ (secrets.AWS_ACCESS_KEY_ID != '' &&
|
||||
secrets.AWS_ACCESS_KEY_ID != '' &&
|
||||
secrets.AWS_SECRET_ACCESS_KEY != '' &&
|
||||
secrets.AWS_SECRET_ACCESS_KEY != '') || '' }}" ]; then
|
||||
echo "has-secrets=1" >> "$GITHUB_OUTPUT"
|
||||
echo "has secrets!"
|
||||
else
|
||||
echo "has-secrets=0" >> "$GITHUB_OUTPUT"
|
||||
echo "no secrets!"
|
||||
fi
|
||||
|
||||
docker_ephemeral_env:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: Push ephemeral env Docker image to ECR
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: "Download artifact"
|
||||
uses: actions/github-script@v3.1.0
|
||||
with:
|
||||
script: |
|
||||
const artifacts = await github.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: ${{ github.event.workflow_run.id }},
|
||||
});
|
||||
|
||||
core.info('*** artifacts')
|
||||
core.info(JSON.stringify(artifacts))
|
||||
|
||||
const matchArtifact = artifacts.data.artifacts.filter((artifact) => {
|
||||
return artifact.name == "build"
|
||||
})[0];
|
||||
if(!matchArtifact) return core.setFailed("Build artifacts not found")
|
||||
|
||||
const download = await github.actions.downloadArtifact({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
artifact_id: matchArtifact.id,
|
||||
archive_format: 'zip',
|
||||
});
|
||||
var fs = require('fs');
|
||||
fs.writeFileSync('${{github.workspace}}/build.zip', Buffer.from(download.data));
|
||||
|
||||
- run: unzip build.zip
|
||||
|
||||
- name: Display downloaded files (debug)
|
||||
run: ls -la
|
||||
|
||||
- name: Get SHA
|
||||
id: get-sha
|
||||
run: echo "::set-output name=sha::$(cat ./SHA)"
|
||||
|
||||
- name: Get PR
|
||||
id: get-pr
|
||||
run: echo "::set-output name=num::$(cat ./PR-NUM)"
|
||||
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-west-2
|
||||
|
||||
- name: Login to Amazon ECR
|
||||
id: login-ecr
|
||||
uses: aws-actions/amazon-ecr-login@v1
|
||||
|
||||
- name: Load, tag and push image to ECR
|
||||
id: push-image
|
||||
env:
|
||||
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
|
||||
ECR_REPOSITORY: superset-ci
|
||||
SHA: ${{ steps.get-sha.outputs.sha }}
|
||||
IMAGE_TAG: pr-${{ steps.get-pr.outputs.num }}
|
||||
run: |
|
||||
docker load < $SHA.tar.gz
|
||||
docker tag $SHA $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
|
||||
docker tag $SHA $ECR_REGISTRY/$ECR_REPOSITORY:$SHA
|
||||
docker push -a $ECR_REGISTRY/$ECR_REPOSITORY
|
||||
@@ -6,7 +6,6 @@ on:
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
if: github.event.pull_request.draft == false
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
@@ -23,16 +22,29 @@ jobs:
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: docker-release
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: ["dev", "lean", "lean310", "websocket", "dockerize"]
|
||||
platform: ["linux/amd64", "linux/arm64"]
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
ref: ${{ github.ref }}
|
||||
- shell: bash
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build Docker Image
|
||||
env:
|
||||
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
run: |
|
||||
.github/workflows/docker_build_push.sh
|
||||
GITHUB_RELEASE_TAG_NAME="${{ github.event.release.tag_name }}"
|
||||
./scripts/docker_build_push.sh "$GITHUB_RELEASE_TAG_NAME" ${{ matrix.target }} ${{ matrix.platform }}
|
||||
|
||||
@@ -10,7 +10,6 @@ on:
|
||||
jobs:
|
||||
config:
|
||||
runs-on: "ubuntu-latest"
|
||||
if: github.event.pull_request.draft == false
|
||||
outputs:
|
||||
has-secrets: ${{ steps.check.outputs.has-secrets }}
|
||||
steps:
|
||||
@@ -25,24 +24,52 @@ jobs:
|
||||
echo "has-secrets=0" >> "$GITHUB_OUTPUT"
|
||||
echo "no secrets!"
|
||||
fi
|
||||
|
||||
docker-build:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: docker-build
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
target: ["dev", "lean", "lean310", "websocket", "dockerize"]
|
||||
platform: ["linux/amd64", "linux/arm64"]
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build Docker Image
|
||||
shell: bash
|
||||
env:
|
||||
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
run: |
|
||||
./scripts/docker_build_push.sh "" ${{ matrix.target }} ${{ matrix.platform }}
|
||||
|
||||
ephemeral-docker-build:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: docker-build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- shell: bash
|
||||
env:
|
||||
DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }}
|
||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
run: |
|
||||
.github/workflows/docker_build_push.sh
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build ephemeral env image
|
||||
if: github.event_name == 'pull_request'
|
||||
@@ -50,12 +77,19 @@ jobs:
|
||||
mkdir -p ./build
|
||||
echo ${{ github.sha }} > ./build/SHA
|
||||
echo ${{ github.event.pull_request.number }} > ./build/PR-NUM
|
||||
DOCKER_BUILDKIT=1 docker build --target ci -t ${{ github.sha }} -t "pr-${{ github.event.pull_request.number }}" .
|
||||
docker buildx build --target ci \
|
||||
--load \
|
||||
--cache-from=type=registry,ref=apache/superset:lean \
|
||||
-t ${{ github.sha }} \
|
||||
-t "pr-${{ github.event.pull_request.number }}" \
|
||||
--platform linux/amd64 \
|
||||
--label "build_actor=${GITHUB_ACTOR}" \
|
||||
.
|
||||
docker save ${{ github.sha }} | gzip > ./build/${{ github.sha }}.tar.gz
|
||||
|
||||
- name: Upload build artifacts
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: build
|
||||
path: build/
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
set -eo pipefail
|
||||
|
||||
SHA=$(git rev-parse HEAD)
|
||||
REPO_NAME="apache/superset"
|
||||
|
||||
if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
|
||||
REFSPEC=$(echo "${GITHUB_HEAD_REF}" | sed 's/[^a-zA-Z0-9]/-/g' | head -c 40)
|
||||
PR_NUM=$(echo "${GITHUB_REF}" | sed 's:refs/pull/::' | sed 's:/merge::')
|
||||
LATEST_TAG="pr-${PR_NUM}"
|
||||
elif [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
|
||||
REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/tags/::' | head -c 40)
|
||||
LATEST_TAG="${REFSPEC}"
|
||||
else
|
||||
REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/heads/::' | sed 's/[^a-zA-Z0-9]/-/g' | head -c 40)
|
||||
LATEST_TAG="${REFSPEC}"
|
||||
fi
|
||||
|
||||
if [[ "${REFSPEC}" == "master" ]]; then
|
||||
LATEST_TAG="latest"
|
||||
fi
|
||||
|
||||
cat<<EOF
|
||||
Rolling with tags:
|
||||
- ${REPO_NAME}:${SHA}
|
||||
- ${REPO_NAME}:${REFSPEC}
|
||||
- ${REPO_NAME}:${LATEST_TAG}
|
||||
EOF
|
||||
|
||||
#
|
||||
# Build the "lean" image
|
||||
#
|
||||
DOCKER_BUILDKIT=1 docker build --target lean \
|
||||
-t "${REPO_NAME}:${SHA}" \
|
||||
-t "${REPO_NAME}:${REFSPEC}" \
|
||||
-t "${REPO_NAME}:${LATEST_TAG}" \
|
||||
--label "sha=${SHA}" \
|
||||
--label "built_at=$(date)" \
|
||||
--label "target=lean" \
|
||||
--label "build_actor=${GITHUB_ACTOR}" \
|
||||
.
|
||||
|
||||
#
|
||||
# Build the "lean310" image
|
||||
#
|
||||
DOCKER_BUILDKIT=1 docker build --target lean \
|
||||
-t "${REPO_NAME}:${SHA}-py310" \
|
||||
-t "${REPO_NAME}:${REFSPEC}-py310" \
|
||||
-t "${REPO_NAME}:${LATEST_TAG}-py310" \
|
||||
--build-arg PY_VER="3.10-slim-bookworm"\
|
||||
--label "sha=${SHA}" \
|
||||
--label "built_at=$(date)" \
|
||||
--label "target=lean310" \
|
||||
--label "build_actor=${GITHUB_ACTOR}" \
|
||||
.
|
||||
|
||||
#
|
||||
# Build the "websocket" image
|
||||
#
|
||||
DOCKER_BUILDKIT=1 docker build \
|
||||
-t "${REPO_NAME}:${SHA}-websocket" \
|
||||
-t "${REPO_NAME}:${REFSPEC}-websocket" \
|
||||
-t "${REPO_NAME}:${LATEST_TAG}-websocket" \
|
||||
--label "sha=${SHA}" \
|
||||
--label "built_at=$(date)" \
|
||||
--label "target=websocket" \
|
||||
--label "build_actor=${GITHUB_ACTOR}" \
|
||||
superset-websocket
|
||||
|
||||
#
|
||||
# Build the dev image
|
||||
#
|
||||
DOCKER_BUILDKIT=1 docker build --target dev \
|
||||
-t "${REPO_NAME}:${SHA}-dev" \
|
||||
-t "${REPO_NAME}:${REFSPEC}-dev" \
|
||||
-t "${REPO_NAME}:${LATEST_TAG}-dev" \
|
||||
--label "sha=${SHA}" \
|
||||
--label "built_at=$(date)" \
|
||||
--label "target=dev" \
|
||||
--label "build_actor=${GITHUB_ACTOR}" \
|
||||
.
|
||||
|
||||
#
|
||||
# Build the dockerize image
|
||||
#
|
||||
DOCKER_BUILDKIT=1 docker build \
|
||||
-t "${REPO_NAME}:dockerize" \
|
||||
--label "sha=${SHA}" \
|
||||
--label "built_at=$(date)" \
|
||||
--label "build_actor=${GITHUB_ACTOR}" \
|
||||
-f dockerize.Dockerfile \
|
||||
.
|
||||
|
||||
if [ -z "${DOCKERHUB_TOKEN}" ]; then
|
||||
# Skip if secrets aren't populated -- they're only visible for actions running in the repo (not on forks)
|
||||
echo "Skipping Docker push"
|
||||
else
|
||||
# Login and push
|
||||
docker logout
|
||||
docker login --username "${DOCKERHUB_USER}" --password "${DOCKERHUB_TOKEN}"
|
||||
docker push --all-tags "${REPO_NAME}"
|
||||
fi
|
||||
@@ -25,8 +25,12 @@
|
||||
"value": "8080"
|
||||
},
|
||||
{
|
||||
"name": "SUPERSET_SECRET_KEY",
|
||||
"value": "super-secret-for-ephemerals"
|
||||
"name": "SUPERSET_SECRET_KEY",
|
||||
"value": "super-secret-for-ephemerals"
|
||||
},
|
||||
{
|
||||
"name": "TALISMAN_ENABLED",
|
||||
"value": "False"
|
||||
}
|
||||
],
|
||||
"mountPoints": [],
|
||||
|
||||
@@ -8,7 +8,6 @@ on:
|
||||
|
||||
jobs:
|
||||
embedded-sdk-test:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
defaults:
|
||||
run:
|
||||
|
||||
@@ -79,6 +79,80 @@ jobs:
|
||||
})
|
||||
core.setFailed(errMsg)
|
||||
|
||||
docker_ephemeral_env:
|
||||
needs: config
|
||||
if: needs.config.outputs.has-secrets
|
||||
name: Push ephemeral env Docker image to ECR
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: "Download artifact"
|
||||
uses: actions/github-script@v3.1.0
|
||||
with:
|
||||
script: |
|
||||
const artifacts = await github.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: ${{ github.event.workflow_run.id }},
|
||||
});
|
||||
|
||||
core.info('*** artifacts')
|
||||
core.info(JSON.stringify(artifacts))
|
||||
|
||||
const matchArtifact = artifacts.data.artifacts.filter((artifact) => {
|
||||
return artifact.name === "build";
|
||||
});
|
||||
|
||||
if (!matchArtifact.length) {
|
||||
return core.setFailed("Build artifacts not found");
|
||||
}
|
||||
|
||||
const download = await github.actions.downloadArtifact({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
artifact_id: matchArtifact[0].id,
|
||||
archive_format: 'zip',
|
||||
});
|
||||
var fs = require('fs');
|
||||
fs.writeFileSync('${{github.workspace}}/build.zip', Buffer.from(download.data));
|
||||
|
||||
- run: unzip build.zip
|
||||
|
||||
- name: Display downloaded files (debug)
|
||||
run: ls -la
|
||||
|
||||
- name: Get SHA
|
||||
id: get-sha
|
||||
run: echo "::set-output name=sha::$(cat ./SHA)"
|
||||
|
||||
- name: Get PR
|
||||
id: get-pr
|
||||
run: echo "::set-output name=num::$(cat ./PR-NUM)"
|
||||
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-west-2
|
||||
|
||||
- name: Login to Amazon ECR
|
||||
id: login-ecr
|
||||
uses: aws-actions/amazon-ecr-login@v1
|
||||
|
||||
- name: Load, tag and push image to ECR
|
||||
id: push-image
|
||||
env:
|
||||
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
|
||||
ECR_REPOSITORY: superset-ci
|
||||
SHA: ${{ steps.get-sha.outputs.sha }}
|
||||
IMAGE_TAG: pr-${{ steps.get-pr.outputs.num }}
|
||||
run: |
|
||||
docker load < $SHA.tar.gz
|
||||
docker tag $SHA $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
|
||||
docker tag $SHA $ECR_REGISTRY/$ECR_REPOSITORY:$SHA
|
||||
docker push -a $ECR_REGISTRY/$ECR_REPOSITORY
|
||||
|
||||
ephemeral_env_up:
|
||||
needs: ephemeral_env_comment
|
||||
if: needs.ephemeral_env_comment.outputs.slash-command == 'up'
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
name: Label Migration PR
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'superset/migrations/**'
|
||||
|
||||
jobs:
|
||||
label:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Add label
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{github.token}}
|
||||
script: |
|
||||
github.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
labels: ['risk:db-migration']
|
||||
})
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Prefer Typescript
|
||||
name: Prefer TypeScript
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -9,7 +9,7 @@ on:
|
||||
jobs:
|
||||
prefer_typescript:
|
||||
if: github.ref == 'ref/heads/master' && github.event_name == 'pull_request'
|
||||
name: Prefer Typescript
|
||||
name: Prefer TypeScript
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
@@ -40,7 +40,7 @@ jobs:
|
||||
APPLITOOLS_BATCH_NAME: Superset Cypress
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
|
||||
@@ -9,7 +9,6 @@ on:
|
||||
|
||||
jobs:
|
||||
test-load-examples:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -21,7 +20,7 @@ jobs:
|
||||
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
|
||||
@@ -11,7 +11,6 @@ on:
|
||||
|
||||
jobs:
|
||||
cypress-matrix:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -34,7 +33,7 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
|
||||
@@ -10,7 +10,6 @@ on:
|
||||
|
||||
jobs:
|
||||
frontend-build:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
|
||||
@@ -10,7 +10,6 @@ on:
|
||||
|
||||
jobs:
|
||||
test-mysql:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -76,7 +75,6 @@ jobs:
|
||||
bash .github/workflows/codecov.sh -c -F python -F mysql
|
||||
|
||||
test-postgres:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -88,7 +86,7 @@ jobs:
|
||||
SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -143,7 +141,6 @@ jobs:
|
||||
bash .github/workflows/codecov.sh -c -F python -F postgres
|
||||
|
||||
test-sqlite:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -153,7 +150,9 @@ jobs:
|
||||
SUPERSET_CONFIG: tests.integration_tests.superset_test_config
|
||||
REDIS_PORT: 16379
|
||||
SUPERSET__SQLALCHEMY_DATABASE_URI: |
|
||||
sqlite:///${{ github.workspace }}/.temp/unittest.db
|
||||
sqlite:///${{ github.workspace }}/.temp/superset.db?check_same_thread=true
|
||||
SUPERSET__SQLALCHEMY_EXAMPLES_URI: |
|
||||
sqlite:///${{ github.workspace }}/.temp/examples.db?check_same_thread=true
|
||||
services:
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
|
||||
@@ -10,7 +10,6 @@ on:
|
||||
|
||||
jobs:
|
||||
python-lint:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -50,7 +49,6 @@ jobs:
|
||||
run: pylint -j 0 superset
|
||||
|
||||
pre-commit:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -88,10 +86,14 @@ jobs:
|
||||
echo "HOMEBREW_REPOSITORY=$HOMEBREW_REPOSITORY" >>"${GITHUB_ENV}"
|
||||
brew install norwoodj/tap/helm-docs
|
||||
- name: pre-commit
|
||||
run: pre-commit run --all-files
|
||||
run: |
|
||||
if ! pre-commit run --all-files; then
|
||||
git status
|
||||
git diff
|
||||
exit 1
|
||||
fi
|
||||
|
||||
babel-extract:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
|
||||
@@ -10,7 +10,6 @@ on:
|
||||
|
||||
jobs:
|
||||
test-postgres-presto:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -23,7 +22,7 @@ jobs:
|
||||
SUPERSET__SQLALCHEMY_EXAMPLES_URI: presto://localhost:15433/memory/default
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -87,7 +86,6 @@ jobs:
|
||||
bash .github/workflows/codecov.sh -c -F python -F presto
|
||||
|
||||
test-postgres-hive:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -101,7 +99,7 @@ jobs:
|
||||
UPLOAD_FOLDER: /tmp/.superset/uploads/
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14-alpine
|
||||
image: postgres:15-alpine
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -134,7 +132,7 @@ jobs:
|
||||
run: sudo chown -R $USER:$USER /tmp/.superset
|
||||
- name: Start hadoop and hive
|
||||
if: steps.check.outcome == 'failure'
|
||||
run: docker-compose -f scripts/databases/hive/docker-compose.yml up -d
|
||||
run: docker compose -f scripts/databases/hive/docker-compose.yml up -d
|
||||
- name: Setup Python
|
||||
if: steps.check.outcome == 'failure'
|
||||
uses: actions/setup-python@v4
|
||||
|
||||
@@ -10,7 +10,6 @@ on:
|
||||
|
||||
jobs:
|
||||
unit-tests:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
|
||||
@@ -9,7 +9,6 @@ on:
|
||||
|
||||
jobs:
|
||||
frontend-check:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
@@ -31,7 +30,6 @@ jobs:
|
||||
npm run check-translation
|
||||
|
||||
babel-extract:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
|
||||
@@ -9,7 +9,6 @@ on:
|
||||
|
||||
jobs:
|
||||
app-checks:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
|
||||
@@ -59,6 +59,7 @@ superset/bin/supersetc
|
||||
tmp
|
||||
rat-results.txt
|
||||
superset/app/
|
||||
superset-websocket/config.json
|
||||
|
||||
# Node.js, webpack artifacts, storybook
|
||||
*.entry.js
|
||||
|
||||
@@ -42,12 +42,13 @@ repos:
|
||||
hooks:
|
||||
- id: mypy
|
||||
args: [--check-untyped-defs]
|
||||
additional_dependencies:
|
||||
[
|
||||
additional_dependencies: [
|
||||
types-simplejson,
|
||||
types-python-dateutil,
|
||||
types-requests,
|
||||
types-redis,
|
||||
# types-redis 4.6.0.5 is failing mypy
|
||||
# because of https://github.com/python/typeshed/pull/10531
|
||||
types-redis==4.6.0.4,
|
||||
types-pytz,
|
||||
types-croniter,
|
||||
types-PyYAML,
|
||||
|
||||
@@ -50,15 +50,6 @@ unsafe-load-any-extension=no
|
||||
# run arbitrary code
|
||||
extension-pkg-whitelist=pyarrow
|
||||
|
||||
# Allow optimization of some AST trees. This will activate a peephole AST
|
||||
# optimizer, which will apply various small optimizations. For instance, it can
|
||||
# be used to obtain the result of joining multiple strings with the addition
|
||||
# operator. Joining a lot of strings can lead to a maximum recursion error in
|
||||
# Pylint and this flag can prevent that. It has one side effect, the resulting
|
||||
# AST will be different than the one from reality. This option is deprecated
|
||||
# and it will be removed in Pylint 2.0.
|
||||
optimize-ast=no
|
||||
|
||||
|
||||
[MESSAGES CONTROL]
|
||||
|
||||
@@ -83,11 +74,11 @@ enable=
|
||||
# no Warning level messages displayed, use"--disable=all --enable=classes
|
||||
# --disable=W"
|
||||
disable=
|
||||
cyclic-import, # re-enable once this no longer raises false positives
|
||||
missing-docstring,
|
||||
duplicate-code,
|
||||
unspecified-encoding,
|
||||
# re-enable once this no longer raises false positives
|
||||
too-many-instance-attributes
|
||||
too-many-instance-attributes # re-enable once this no longer raises false positives
|
||||
|
||||
[REPORTS]
|
||||
|
||||
@@ -96,12 +87,6 @@ disable=
|
||||
# mypackage.mymodule.MyReporterClass.
|
||||
output-format=text
|
||||
|
||||
# Put messages in a separate file for each module / package specified on the
|
||||
# command line instead of printing them on stdout. Reports (if any) will be
|
||||
# written in a file name "pylint_global.[txt|html]". This option is deprecated
|
||||
# and it will be removed in Pylint 2.0.
|
||||
files-output=no
|
||||
|
||||
# Tells whether to display a full report or only the messages
|
||||
reports=yes
|
||||
|
||||
@@ -141,63 +126,33 @@ property-classes=
|
||||
# Regular expression matching correct argument names
|
||||
argument-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Naming hint for argument names
|
||||
argument-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression matching correct method names
|
||||
method-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Naming hint for method names
|
||||
method-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression matching correct variable names
|
||||
variable-rgx=[a-z_][a-z0-9_]{1,30}$
|
||||
|
||||
# Naming hint for variable names
|
||||
variable-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression matching correct inline iteration names
|
||||
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
|
||||
|
||||
# Naming hint for inline iteration names
|
||||
inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$
|
||||
|
||||
# Regular expression matching correct constant names
|
||||
const-rgx=(([A-Za-z_][A-Za-z0-9_]*)|(__.*__))$
|
||||
|
||||
# Naming hint for constant names
|
||||
const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$
|
||||
|
||||
# Regular expression matching correct class names
|
||||
class-rgx=[A-Z_][a-zA-Z0-9]+$
|
||||
|
||||
# Naming hint for class names
|
||||
class-name-hint=[A-Z_][a-zA-Z0-9]+$
|
||||
|
||||
# Regular expression matching correct class attribute names
|
||||
class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
|
||||
|
||||
# Naming hint for class attribute names
|
||||
class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
|
||||
|
||||
# Regular expression matching correct module names
|
||||
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
|
||||
|
||||
# Naming hint for module names
|
||||
module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
|
||||
|
||||
# Regular expression matching correct attribute names
|
||||
attr-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Naming hint for attribute names
|
||||
attr-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression matching correct function names
|
||||
function-rgx=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Naming hint for function names
|
||||
function-name-hint=[a-z_][a-z0-9_]{2,30}$
|
||||
|
||||
# Regular expression which should only match function or class names that do
|
||||
# not require a docstring.
|
||||
no-docstring-rgx=^_
|
||||
@@ -225,12 +180,6 @@ ignore-long-lines=^\s*(# )?<?https?://\S+>?$
|
||||
# else.
|
||||
single-line-if-stmt=no
|
||||
|
||||
# List of optional constructs for which whitespace checking is disabled. `dict-
|
||||
# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
|
||||
# `trailing-comma` allows a space between comma and closing bracket: (a, ).
|
||||
# `empty-line` allows space-only lines.
|
||||
no-space-check=trailing-comma,dict-separator
|
||||
|
||||
# Maximum number of lines in a module
|
||||
max-module-lines=1000
|
||||
|
||||
@@ -427,4 +376,4 @@ analyse-fallback-blocks=no
|
||||
|
||||
# Exceptions that will emit a warning when being caught. Defaults to
|
||||
# "Exception"
|
||||
overgeneral-exceptions=Exception
|
||||
overgeneral-exceptions=builtins.Exception
|
||||
|
||||
@@ -119,11 +119,13 @@ If you decide to join the [Community Slack](http://bit.ly/join-superset-slack),
|
||||
|
||||
**3. Ask thoughtful questions.**
|
||||
|
||||
- We’re all here to help each other out. The best way to get help is by investing effort into your questions. First check and see if your question is answered in [the Superset documentation](https://superset.apache.org/faq.html) or on [Stack Overflow](https://stackoverflow.com/search?q=apache+superset). You can also check [GitHub issues](https://github.com/apache/superset/issues) to see if your question or feature request has been submitted before. Then, use Slack search to see if your question has already been asked and answered in the past. If you still feel the need to ask a question, make sure you include:
|
||||
- We’re all here to help each other out. The best way to get help is by investing effort into your questions. First check and see if your question is answered in the [Superset documentation](https://superset.apache.org/faq.html) or on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset). You can also check GitHub trackers to see if your inquiry has been submitted before: [GitHub discussions](https://github.com/apache/superset/discussions) for questions and feature requests and [GitHub issues](https://github.com/apache/superset/issues) for bug reports. Then, use Slack search to see if your question has already been asked and answered in the past.
|
||||
|
||||
- The steps you’ve already taken
|
||||
- Relevant details presented cleanly (text stacktraces, formatted markdown, or screenshots. Please don’t paste large blocks of code unformatted or post photos of your screen from your phone)
|
||||
- The specific question you have or the specific type of help you're seeking
|
||||
If you still feel the need to ask a question, make sure you include:
|
||||
|
||||
- The steps you’ve already taken.
|
||||
- Relevant details presented cleanly: text stacktraces, formatted markdown, or screenshots. Please don’t paste large blocks of code unformatted or post photos of your screen from your phone.
|
||||
- The specific question you have or the specific type of help you're seeking.
|
||||
|
||||
**4. Avoid double posting**
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ little bit helps, and credit will always be given.
|
||||
- [Build assets](#build-assets)
|
||||
- [Webpack dev server](#webpack-dev-server)
|
||||
- [Other npm commands](#other-npm-commands)
|
||||
- [Docker (docker-compose)](#docker-docker-compose)
|
||||
- [Docker (docker compose)](#docker-docker-compose)
|
||||
- [Updating NPM packages](#updating-npm-packages)
|
||||
- [Feature flags](#feature-flags)
|
||||
- [Git Hooks](#git-hooks)
|
||||
@@ -138,7 +138,7 @@ The best way to report a bug is to file an issue on GitHub. Please include:
|
||||
When posting Python stack traces, please quote them using
|
||||
[Markdown blocks](https://help.github.com/articles/creating-and-highlighting-code-blocks/).
|
||||
|
||||
_Please note that feature requests opened as Github Issues will be moved to Discussions._
|
||||
_Please note that feature requests opened as GitHub Issues will be moved to Discussions._
|
||||
|
||||
### Submit Ideas or Feature Requests
|
||||
|
||||
@@ -170,7 +170,7 @@ articles. See [Documentation](#documentation) for more details.
|
||||
### Add Translations
|
||||
|
||||
If you are proficient in a non-English language, you can help translate
|
||||
text strings from Superset's UI. You can jump in to the existing
|
||||
text strings from Superset's UI. You can jump into the existing
|
||||
language dictionaries at
|
||||
`superset/translations/<language_code>/LC_MESSAGES/messages.po`, or
|
||||
even create a dictionary for a new language altogether.
|
||||
@@ -180,6 +180,51 @@ See [Translating](#translating) for more details.
|
||||
|
||||
There is a dedicated [`apache-superset` tag](https://stackoverflow.com/questions/tagged/apache-superset) on [StackOverflow](https://stackoverflow.com/). Please use it when asking questions.
|
||||
|
||||
## Types of Contributors
|
||||
|
||||
Following the project governance model of the Apache Software Foundation (ASF), Apache Superset has a specific set of contributor roles:
|
||||
|
||||
### PMC Member
|
||||
|
||||
A Project Management Committee (PMC) member is a person who has been elected by the PMC to help manage the project. PMC members are responsible for the overall health of the project, including community development, release management, and project governance. PMC members are also responsible for the technical direction of the project.
|
||||
|
||||
For more information about Apache Project PMCs, please refer to https://www.apache.org/foundation/governance/pmcs.html
|
||||
|
||||
### Committer
|
||||
|
||||
A committer is a person who has been elected by the PMC to have write access (commit access) to the code repository. They can modify the code, documentation, and website and accept contributions from others.
|
||||
|
||||
The official list of committers and PMC members can be found [here](https://projects.apache.org/committee.html?superset).
|
||||
|
||||
### Contributor
|
||||
|
||||
A contributor is a person who has contributed to the project in any way, including but not limited to code, tests, documentation, issues, and discussions.
|
||||
|
||||
> You can also review the Superset project's guidelines for PMC member promotion here: https://github.com/apache/superset/wiki/Guidelines-for-promoting-Superset-Committers-to-the-Superset-PMC
|
||||
|
||||
### Security Team
|
||||
|
||||
The security team is a selected subset of PMC members, committers and non-committers who are responsible for handling security issues.
|
||||
|
||||
New members of the security team are selected by the PMC members in a vote. You can request to be added to the team by sending a message to private@superset.apache.org. However, the team should be small and focused on solving security issues, so the requests will be evaluated on a case-by-case basis and the team size will be kept relatively small, limited to only actively security-focused contributors.
|
||||
|
||||
This security team must follow the [ASF vulnerability handling process](https://apache.org/security/committers.html#asf-project-security-for-committers).
|
||||
|
||||
Each new security issue is tracked as a JIRA ticket on the [ASF's JIRA Superset security project](https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=588&projectKey=SUPERSETSEC)
|
||||
|
||||
Security team members must:
|
||||
|
||||
- Have an [ICLA](https://www.apache.org/licenses/contributor-agreements.html) signed with Apache Software Foundation.
|
||||
- Not reveal information about pending and unfixed security issues to anyone (including their employers) unless specifically authorised by the security team members, e.g., if the security team agrees that diagnosing and solving an issue requires the involvement of external experts.
|
||||
|
||||
A release manager, the contributor overseeing the release of a specific version of Apache Superset, is by default a member of the security team. However, they are not expected to be active in assessing, discussing, and fixing security issues.
|
||||
|
||||
Security team members should also follow these general expectations:
|
||||
|
||||
- Actively participate in assessing, discussing, fixing, and releasing security issues in Superset.
|
||||
- Avoid discussing security fixes in public forums. Pull request (PR) descriptions should not contain any information about security issues. The corresponding JIRA ticket should contain a link to the PR.
|
||||
- Security team members who contribute to a fix may be listed as remediation developers in the CVE report, along with their job affiliation (if they choose to include it).
|
||||
|
||||
## Pull Request Guidelines
|
||||
|
||||
A philosophy we would like to strongly encourage is
|
||||
@@ -329,16 +374,16 @@ Triaging goals
|
||||
|
||||
First, add **Category labels (a.k.a. hash labels)**. Every issue/PR must have one hash label (except spam entry). Labels that begin with `#` defines issue/PR type:
|
||||
|
||||
| Label | for Issue | for PR |
|
||||
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `#bug` | Bug report | Bug fix |
|
||||
| `#code-quality` | Describe problem with code, architecture or productivity | Refactor, tests, tooling |
|
||||
| `#feature` | New feature request | New feature implementation |
|
||||
| `#refine` | Propose improvement that does not provide new features and is also not a bug fix nor refactor, such as adjust padding, refine UI style. | Implementation of improvement that does not provide new features and is also not a bug fix nor refactor, such as adjust padding, refine UI style. |
|
||||
| `#doc` | Documentation | Documentation |
|
||||
| `#question` | Troubleshooting: Installation, Running locally, Ask how to do something. Can be changed to `#bug` later. | N/A |
|
||||
| `#SIP` | Superset Improvement Proposal | N/A |
|
||||
| `#ASF` | Tasks related to Apache Software Foundation policy | Tasks related to Apache Software Foundation policy |
|
||||
| Label | for Issue | for PR |
|
||||
| --------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `#bug` | Bug report | Bug fix |
|
||||
| `#code-quality` | Describe problem with code, architecture or productivity | Refactor, tests, tooling |
|
||||
| `#feature` | New feature request | New feature implementation |
|
||||
| `#refine` | Propose improvement such as adjusting padding or refining UI style, excluding new features, bug fixes, and refactoring. | Implementation of improvement such as adjusting padding or refining UI style, excluding new features, bug fixes, and refactoring. |
|
||||
| `#doc` | Documentation | Documentation |
|
||||
| `#question` | Troubleshooting: Installation, Running locally, Ask how to do something. Can be changed to `#bug` later. | N/A |
|
||||
| `#SIP` | Superset Improvement Proposal | N/A |
|
||||
| `#ASF` | Tasks related to Apache Software Foundation policy | Tasks related to Apache Software Foundation policy |
|
||||
|
||||
Then add other types of labels as appropriate.
|
||||
|
||||
@@ -424,7 +469,7 @@ Commits to `master` trigger a rebuild and redeploy of the documentation site. Su
|
||||
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.8, 3.9, 3.10 or 3.11, then proceed with:
|
||||
Ensure that you are using Python version 3.9, 3.10 or 3.11, then proceed with:
|
||||
|
||||
```bash
|
||||
# Create a virtual environment and activate it (recommended)
|
||||
@@ -577,6 +622,19 @@ cd superset-frontend
|
||||
npm ci
|
||||
```
|
||||
|
||||
Note that Superset uses [Scarf](https://docs.scarf.sh) to capture telemetry/analytics about versions being installed, including the `scarf-js` npm package and an analytics pixel. As noted elsewhere in this documentation, Scarf gathers aggregated stats for the sake of security/release strategy, and does not capture/retain PII. [You can read here](https://docs.scarf.sh/package-analytics/) about the `scarf-js` package, and various means to opt out of it, but you can opt out of the npm package _and_ the pixel by setting the `SCARF_ANALYTICS` envinronment variable to `false` or opt out of the pixel by adding this setting in `superset-frontent/package.json`:
|
||||
|
||||
```json
|
||||
// your-package/package.json
|
||||
{
|
||||
// ...
|
||||
"scarfSettings": {
|
||||
"enabled": false
|
||||
}
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
#### Build assets
|
||||
|
||||
There are three types of assets you can build:
|
||||
@@ -585,13 +643,29 @@ There are three types of assets you can build:
|
||||
2. `npm run dev-server`: local development assets, with sourcemaps and hot refresh support
|
||||
3. `npm run build-instrumented`: instrumented application code for collecting code coverage from Cypress tests
|
||||
|
||||
If this type of error comes while building assets(i.e using above commands):
|
||||
If while using the above commands you encounter an error related to the limit of file watchers:
|
||||
|
||||
```bash
|
||||
Error: You must provide the URL of lib/mappings.wasm by calling SourceMapConsumer.initialize
|
||||
Error: ENOSPC: System limit for number of file watchers reached
|
||||
```
|
||||
Then put this:
|
||||
The error is thrown because the number of files monitored by the system has reached the limit.
|
||||
You can address this this error by increasing the number of inotify watchers.
|
||||
|
||||
The current value of max watches can be checked with:
|
||||
```bash
|
||||
export NODE_OPTIONS=--no-experimental-fetch
|
||||
cat /proc/sys/fs/inotify/max_user_watches
|
||||
```
|
||||
Edit the file /etc/sysctl.conf to increase this value.
|
||||
The value needs to be decided based on the system memory [(see this StackOverflow answer for more context)](https://stackoverflow.com/questions/535768/what-is-a-reasonable-amount-of-inotify-watches-with-linux).
|
||||
|
||||
Open the file in editor and add a line at the bottom specifying the max watches values.
|
||||
```bash
|
||||
fs.inotify.max_user_watches=524288
|
||||
```
|
||||
Save the file and exit editor.
|
||||
To confirm that the change succeeded, run the following command to load the updated value of max_user_watches from sysctl.conf:
|
||||
```bash
|
||||
sudo sysctl -p
|
||||
```
|
||||
|
||||
#### Webpack dev server
|
||||
@@ -636,7 +710,7 @@ Alternatively, there are other NPM commands you may find useful:
|
||||
1. `npm run build-dev`: build assets in development mode.
|
||||
2. `npm run dev`: built dev assets in watch mode, will automatically rebuild when a file changes
|
||||
|
||||
#### Docker (docker-compose)
|
||||
#### Docker (docker compose)
|
||||
|
||||
See docs [here](docker/README.md)
|
||||
|
||||
@@ -704,7 +778,7 @@ We use [Pylint](https://pylint.org/) for linting which can be invoked via:
|
||||
tox -e pylint
|
||||
```
|
||||
|
||||
In terms of best practices please avoid blanket disablement of Pylint messages globally (via `.pylintrc`) or top-level within the file header, albeit there being a few exceptions. Disablement should occur inline as it prevents masking issues and provides context as to why said message is disabled.
|
||||
In terms of best practices please avoid blanket disabling of Pylint messages globally (via `.pylintrc`) or top-level within the file header, albeit there being a few exceptions. Disabling should occur inline as it prevents masking issues and provides context as to why said message is disabled.
|
||||
|
||||
Additionally, the Python code is auto-formatted using [Black](https://github.com/python/black) which
|
||||
is configured as a pre-commit hook. There are also numerous [editor integrations](https://black.readthedocs.io/en/stable/integrations/editors.html)
|
||||
@@ -883,17 +957,17 @@ CYPRESS_BASE_URL=<your url> npm run cypress open
|
||||
|
||||
See [`superset-frontend/cypress_build.sh`](https://github.com/apache/superset/blob/master/superset-frontend/cypress_build.sh).
|
||||
|
||||
As an alternative you can use docker-compose environment for testing:
|
||||
As an alternative you can use docker compose environment for testing:
|
||||
|
||||
Make sure you have added below line to your /etc/hosts file:
|
||||
`127.0.0.1 db`
|
||||
|
||||
If you already have launched Docker environment please use the following command to assure a fresh database instance:
|
||||
`docker-compose down -v`
|
||||
`docker compose down -v`
|
||||
|
||||
Launch environment:
|
||||
|
||||
`CYPRESS_CONFIG=true docker-compose up`
|
||||
`CYPRESS_CONFIG=true docker compose up`
|
||||
|
||||
It will serve backend and frontend on port 8088.
|
||||
|
||||
@@ -913,28 +987,22 @@ For debugging locally using VSCode, you can configure a launch configuration fil
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Python: Flask",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "flask",
|
||||
"env": {
|
||||
"FLASK_APP": "superset",
|
||||
"SUPERSET_ENV": "development"
|
||||
},
|
||||
"args": [
|
||||
"run",
|
||||
"-p 8088",
|
||||
"--with-threads",
|
||||
"--reload",
|
||||
"--debugger"
|
||||
],
|
||||
"jinja": true,
|
||||
"justMyCode": true
|
||||
}
|
||||
]
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Python: Flask",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "flask",
|
||||
"env": {
|
||||
"FLASK_APP": "superset",
|
||||
"SUPERSET_ENV": "development"
|
||||
},
|
||||
"args": ["run", "-p 8088", "--with-threads", "--reload", "--debugger"],
|
||||
"jinja": true,
|
||||
"justMyCode": true
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -966,7 +1034,7 @@ superset:
|
||||
Start Superset as usual
|
||||
|
||||
```bash
|
||||
docker-compose up
|
||||
docker compose up
|
||||
```
|
||||
|
||||
Install the required libraries and packages to the docker container
|
||||
@@ -1019,24 +1087,24 @@ You are now ready to attach a debugger to the process. Using VSCode you can conf
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Attach to Superset App in Docker Container",
|
||||
"type": "python",
|
||||
"request": "attach",
|
||||
"connect": {
|
||||
"host": "127.0.0.1",
|
||||
"port": 5678
|
||||
},
|
||||
"pathMappings": [
|
||||
{
|
||||
"name": "Attach to Superset App in Docker Container",
|
||||
"type": "python",
|
||||
"request": "attach",
|
||||
"connect": {
|
||||
"host": "127.0.0.1",
|
||||
"port": 5678
|
||||
},
|
||||
"pathMappings": [
|
||||
{
|
||||
"localRoot": "${workspaceFolder}",
|
||||
"remoteRoot": "/app"
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
"localRoot": "${workspaceFolder}",
|
||||
"remoteRoot": "/app"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1201,7 +1269,7 @@ To contribute a plugin to Superset, your plugin must meet the following criteria
|
||||
- The plugin should contain sufficient unit/e2e tests
|
||||
- The plugin should use appropriate namespacing, e.g. a folder name of `plugin-chart-whatever` and a package name of `@superset-ui/plugin-chart-whatever`
|
||||
- The plugin should use them variables via Emotion, as passed in by the ThemeProvider
|
||||
- The plugin should provide adequate error handling (no data returned, malformatted data, invalid controls, etc.)
|
||||
- The plugin should provide adequate error handling (no data returned, malformed data, invalid controls, etc.)
|
||||
- The plugin should contain documentation in the form of a populated `README.md` file
|
||||
- The plugin should have a meaningful and unique icon
|
||||
- Above all else, the plugin should come with a _commitment to maintenance_ from the original author(s)
|
||||
@@ -1337,7 +1405,7 @@ To do this, you'll need to:
|
||||
but perfect for testing (stores cache in `/tmp`)
|
||||
|
||||
```python
|
||||
from cachelib.file import FileSystemCache
|
||||
from flask_caching.backends.filesystemcache import FileSystemCache
|
||||
RESULTS_BACKEND = FileSystemCache('/tmp/sqllab')
|
||||
```
|
||||
|
||||
@@ -1403,11 +1471,11 @@ Note not all fields are correctly categorized. The fields vary based on visualiz
|
||||
|
||||
### Time
|
||||
|
||||
| Field | Type | Notes |
|
||||
| ------------------ | -------- | ------------------------------------- |
|
||||
| `granularity_sqla` | _string_ | The SQLA **Time Column** widget |
|
||||
| `time_grain_sqla` | _string_ | The SQLA **Time Grain** widget |
|
||||
| `time_range` | _string_ | The **Time range** widget |
|
||||
| Field | Type | Notes |
|
||||
| ------------------ | -------- | ------------------------------- |
|
||||
| `granularity_sqla` | _string_ | The SQLA **Time Column** widget |
|
||||
| `time_grain_sqla` | _string_ | The SQLA **Time Grain** widget |
|
||||
| `time_range` | _string_ | The **Time range** widget |
|
||||
|
||||
### GROUP BY
|
||||
|
||||
|
||||
@@ -22,25 +22,28 @@ ARG PY_VER=3.9-slim-bookworm
|
||||
|
||||
# if BUILDPLATFORM is null, set it to 'amd64' (or leave as is otherwise).
|
||||
ARG BUILDPLATFORM=${BUILDPLATFORM:-amd64}
|
||||
FROM --platform=${BUILDPLATFORM} node:16-slim AS superset-node
|
||||
FROM --platform=${BUILDPLATFORM} node:16-bookworm-slim AS superset-node
|
||||
|
||||
ARG NPM_BUILD_CMD="build"
|
||||
ENV BUILD_CMD=${NPM_BUILD_CMD}
|
||||
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||
|
||||
RUN apt-get update -qq \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
build-essential \
|
||||
python3
|
||||
|
||||
ENV BUILD_CMD=${NPM_BUILD_CMD} \
|
||||
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||||
# NPM ci first, as to NOT invalidate previous steps except for when package.json changes
|
||||
WORKDIR /app/superset-frontend
|
||||
|
||||
COPY ./docker/frontend-mem-nag.sh /
|
||||
RUN --mount=type=bind,target=/frontend-mem-nag.sh,src=./docker/frontend-mem-nag.sh \
|
||||
/frontend-mem-nag.sh
|
||||
|
||||
RUN /frontend-mem-nag.sh
|
||||
|
||||
COPY superset-frontend/package*.json ./
|
||||
|
||||
RUN npm ci
|
||||
RUN --mount=type=bind,target=./package.json,src=./superset-frontend/package.json \
|
||||
--mount=type=bind,target=./package-lock.json,src=./superset-frontend/package-lock.json \
|
||||
npm ci
|
||||
|
||||
COPY ./superset-frontend ./
|
||||
|
||||
# This seems to be the most expensive step
|
||||
RUN npm run ${BUILD_CMD}
|
||||
|
||||
@@ -58,10 +61,9 @@ ENV LANG=C.UTF-8 \
|
||||
SUPERSET_HOME="/app/superset_home" \
|
||||
SUPERSET_PORT=8088
|
||||
|
||||
RUN mkdir -p ${PYTHONPATH} \
|
||||
RUN mkdir -p ${PYTHONPATH} superset/static superset-frontend apache_superset.egg-info requirements \
|
||||
&& useradd --user-group -d ${SUPERSET_HOME} -m --no-log-init --shell /bin/bash superset \
|
||||
&& apt-get update -q \
|
||||
&& apt-get install -yq --no-install-recommends \
|
||||
&& apt-get update -qq && apt-get install -yqq --no-install-recommends \
|
||||
build-essential \
|
||||
curl \
|
||||
default-libmysqlclient-dev \
|
||||
@@ -70,29 +72,31 @@ RUN mkdir -p ${PYTHONPATH} \
|
||||
libpq-dev \
|
||||
libecpg-dev \
|
||||
libldap2-dev \
|
||||
&& touch superset/static/version_info.json \
|
||||
&& chown -R superset:superset ./* \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --chown=superset:superset ./requirements/*.txt requirements/
|
||||
COPY --chown=superset:superset setup.py MANIFEST.in README.md ./
|
||||
# setup.py uses the version information in package.json
|
||||
COPY --chown=superset:superset superset-frontend/package.json superset-frontend/
|
||||
|
||||
RUN mkdir -p superset/static \
|
||||
&& touch superset/static/version_info.json \
|
||||
&& pip install --no-cache-dir -r requirements/local.txt
|
||||
RUN --mount=type=bind,target=./requirements/local.txt,src=./requirements/local.txt \
|
||||
--mount=type=bind,target=./requirements/development.txt,src=./requirements/development.txt \
|
||||
--mount=type=bind,target=./requirements/base.txt,src=./requirements/base.txt \
|
||||
--mount=type=cache,target=/root/.cache/pip \
|
||||
pip install -r requirements/local.txt
|
||||
|
||||
COPY --chown=superset:superset --from=superset-node /app/superset/static/assets superset/static/assets
|
||||
## Lastly, let's install superset itself
|
||||
COPY --chown=superset:superset superset superset
|
||||
|
||||
RUN chown -R superset:superset ./* \
|
||||
&& pip install --no-cache-dir -e . \
|
||||
&& flask fab babel-compile --target superset/translations
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
pip install -e . \
|
||||
&& flask fab babel-compile --target superset/translations \
|
||||
&& chown -R superset:superset superset/translations
|
||||
|
||||
COPY --chmod=755 ./docker/run-server.sh /usr/bin/
|
||||
USER superset
|
||||
|
||||
HEALTHCHECK CMD curl -f "http://localhost:$SUPERSET_PORT/health"
|
||||
HEALTHCHECK CMD curl -f "http://localhost:${SUPERSET_PORT}/health"
|
||||
|
||||
EXPOSE ${SUPERSET_PORT}
|
||||
|
||||
@@ -102,13 +106,13 @@ CMD ["/usr/bin/run-server.sh"]
|
||||
# Dev image...
|
||||
######################################################################
|
||||
FROM lean AS dev
|
||||
ARG GECKODRIVER_VERSION=v0.32.0
|
||||
ARG FIREFOX_VERSION=106.0.3
|
||||
ARG GECKODRIVER_VERSION=v0.33.0 \
|
||||
FIREFOX_VERSION=117.0.1
|
||||
|
||||
USER root
|
||||
|
||||
RUN apt-get update -q \
|
||||
&& apt-get install -yq --no-install-recommends \
|
||||
RUN apt-get update -qq \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
libnss3 \
|
||||
libdbus-glib-1-2 \
|
||||
libgtk-3-0 \
|
||||
@@ -117,16 +121,16 @@ RUN apt-get update -q \
|
||||
libxtst6 \
|
||||
wget \
|
||||
# Install GeckoDriver WebDriver
|
||||
&& wget https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O - | tar xfz - -C /usr/local/bin \
|
||||
&& wget -q https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O - | tar xfz - -C /usr/local/bin \
|
||||
# Install Firefox
|
||||
&& wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 -O - | tar xfj - -C /opt \
|
||||
&& wget -q https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 -O - | tar xfj - -C /opt \
|
||||
&& ln -s /opt/firefox/firefox /usr/local/bin/firefox \
|
||||
&& apt-get autoremove -yqq --purge wget && rm -rf /var/lib/apt/lists/* && apt-get clean
|
||||
|
||||
COPY ./requirements/*.txt ./docker/requirements-*.txt/ /app/requirements/
|
||||
&& apt-get autoremove -yqq --purge wget && rm -rf /var/[log,tmp]/* /tmp/* /var/lib/apt/lists/*
|
||||
# Cache everything for dev purposes...
|
||||
RUN pip install --no-cache-dir -r /app/requirements/docker.txt \
|
||||
&& pip install --no-cache-dir -r /app/requirements/requirements-local.txt || true
|
||||
RUN --mount=type=bind,target=./requirements/base.txt,src=./requirements/base.txt \
|
||||
--mount=type=bind,target=./requirements/docker.txt,src=./requirements/docker.txt \
|
||||
--mount=type=cache,target=/root/.cache/pip \
|
||||
pip install -r requirements/docker.txt
|
||||
|
||||
USER superset
|
||||
######################################################################
|
||||
@@ -134,6 +138,6 @@ USER superset
|
||||
######################################################################
|
||||
FROM lean AS ci
|
||||
|
||||
COPY --chown=superset --chmod=755 ./docker/*.sh /app/docker/
|
||||
COPY --chown=superset:superset --chmod=755 ./docker/*.sh /app/docker/
|
||||
|
||||
CMD ["/app/docker/docker-ci.sh"]
|
||||
|
||||
@@ -28,11 +28,17 @@ under the License.
|
||||
[](http://bit.ly/join-superset-slack)
|
||||
[](https://superset.apache.org)
|
||||
|
||||
<img
|
||||
src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache.png"
|
||||
alt="Superset"
|
||||
width="500"
|
||||
/>
|
||||
<picture width="500">
|
||||
<source
|
||||
media="(prefers-color-scheme: dark)"
|
||||
src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache-dark.png"
|
||||
alt="Superset logo (dark)"
|
||||
/>
|
||||
<img
|
||||
src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache.png"
|
||||
alt="Superset logo (light)"
|
||||
/>
|
||||
</picture>
|
||||
|
||||
A modern, enterprise-ready business intelligence web application.
|
||||
|
||||
@@ -122,7 +128,9 @@ Here are some of the major database solutions that are supported:
|
||||
<img src="superset-frontend/src/assets/images/pinot.png" alt="pinot" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/teradata.png" alt="teradata" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/yugabyte.png" alt="yugabyte" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/databend.png" alt="databend" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/starrocks.png" alt="starrocks" border="0" width="200" height="80"/>
|
||||
<img src="superset-frontend/src/assets/images/doris.png" alt="doris" border="0" width="200" height="80"/>
|
||||
</p>
|
||||
|
||||
**A more comprehensive list of supported databases** along with the configuration instructions can be found [here](https://superset.apache.org/docs/databases/installing-database-drivers).
|
||||
@@ -138,7 +146,9 @@ Want to add support for your datastore or data engine? Read more [here](https://
|
||||
- Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
|
||||
- [Join our community's Slack](http://bit.ly/join-superset-slack)
|
||||
and please read our [Slack Community Guidelines](https://github.com/apache/superset/blob/master/CODE_OF_CONDUCT.md#slack-community-guidelines)
|
||||
- [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org)
|
||||
- [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org). To join, simply send an email to [dev-subscribe@superset.apache.org](mailto:dev-subscribe@superset.apache.org)
|
||||
- If you want to help troubleshoot GitHub Issues involving the numerous database drivers that Superset supports, please consider adding your name and the databases you have access to on the [Superset Database Familiarity Rolodex](https://docs.google.com/spreadsheets/d/1U1qxiLvOX0kBTUGME1AHHi6Ywel6ECF8xk_Qy-V9R8c/edit#gid=0)
|
||||
- Join Superset's Town Hall and [Operational Model](https://preset.io/blog/the-superset-operational-model-wants-you/) recurring meetings. Meeting info is available on the [Superset Community Calendar](https://superset.apache.org/community)
|
||||
|
||||
## Contributor Guide
|
||||
|
||||
@@ -149,6 +159,12 @@ how to set up a development environment.
|
||||
|
||||
## Resources
|
||||
|
||||
- [Superset "In the Wild"](RESOURCES/INTHEWILD.md) - open a PR to add your org to the list!
|
||||
- [Feature Flags](RESOURCES/FEATURE_FLAGS.md) - the status of Superset's Feature Flags.
|
||||
- [Standard Roles](RESOURCES/STANDARD_ROLES.md) - How RBAC permissions map to roles.
|
||||
- [Superset Wiki](https://github.com/apache/superset/wiki) - Tons of additional community resources: best practices, community content and other information.
|
||||
- [Superset SIPs](https://github.com/orgs/apache/projects/170) - The status of Superset's SIPs (Superset Improvement Proposals) for both consensus and implementation status.
|
||||
|
||||
Superset 2.0!
|
||||
- [Superset 2.0 Meetup](https://preset.io/events/superset-2-0-meetup/)
|
||||
- [Superset 2.0 Release Notes](https://github.com/apache/superset/tree/master/RELEASING/release-notes-2-0)
|
||||
@@ -172,7 +188,7 @@ Understanding the Superset Points of View
|
||||
- [Helm Chart](https://github.com/apache/superset/tree/master/helm/superset)
|
||||
|
||||
- Recordings of Past [Superset Community Events](https://preset.io/events)
|
||||
- [Mixed Time Series Charts](https://preset.io/events/mixed-time-series-visualization-in-superset-workshop/)
|
||||
- [Mixed Time Series Charts](https://preset.io/events/mixed-time-series-visualization-in-superset-workshop/)
|
||||
- [How the Bing Team Customized Superset for the Internal Self-Serve Data & Analytics Platform](https://preset.io/events/how-the-bing-team-heavily-customized-superset-for-their-internal-data/)
|
||||
- [Live Demo: Visualizing MongoDB and Pinot Data using Trino](https://preset.io/events/2021-04-13-visualizing-mongodb-and-pinot-data-using-trino/)
|
||||
- [Introduction to the Superset API](https://preset.io/events/introduction-to-the-superset-api/)
|
||||
@@ -184,3 +200,6 @@ Understanding the Superset Points of View
|
||||
- [Why Apache Superset is Betting on Apache ECharts](https://preset.io/blog/2021-4-1-why-echarts/)
|
||||
|
||||
- [Superset API](https://superset.apache.org/docs/rest-api)
|
||||
|
||||
<!-- telemetry/analytics pixel: -->
|
||||
<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=bc1c90cd-bc04-4e11-8c7b-289fb2839492" />
|
||||
|
||||
@@ -30,6 +30,7 @@ partaking in the process should join the channel.
|
||||
|
||||
## Release notes for recent releases
|
||||
|
||||
- [3.1](release-notes-3-1/README.md)
|
||||
- [2.0](release-notes-2-0/README.md)
|
||||
- [1.5](release-notes-1-5/README.md)
|
||||
- [1.4](release-notes-1-4/README.md)
|
||||
@@ -238,7 +239,7 @@ Similar to `cherrytree`, the change log script requires a github token, either a
|
||||
|
||||
#### Initial release (e.g. 1.5.0)
|
||||
|
||||
When generating the changelog for an initial minor relese, you should compare with
|
||||
When generating the changelog for an initial minor release, you should compare with
|
||||
the previous release (in the example, the previous release branch is `1.4`, so remember to
|
||||
update it accordingly):
|
||||
|
||||
@@ -343,7 +344,7 @@ To build and run the recently created tarball **from SVN**:
|
||||
# login using admin/admin
|
||||
```
|
||||
|
||||
## Create a release on Github
|
||||
## Create a release on GitHub
|
||||
|
||||
After submitting the tag and testing the release candidate, follow the steps [here](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository) to create the release on GitHub. Use the vote email text as the content for the release description. Make sure to check the "This is a pre-release" checkbox for release candidates. You can check previous releases if you need an example.
|
||||
|
||||
@@ -387,8 +388,23 @@ The script will generate the email text that should be sent to dev@superset.apac
|
||||
|
||||
## Validating a release
|
||||
|
||||
Official instructions:
|
||||
https://www.apache.org/info/verification.html
|
||||
|
||||
We now have a handy script for anyone validating a release to use. The core of it is in this very folder, `verify_release.py`. Just make sure you have all three release files in the same directory (`{some version}.tar.gz`, `{some version}.tar.gz.asc` and `{some version}tar.gz.sha512`). Then you can pass this script the path to the `.gz` file like so:
|
||||
`python verify_release.py ~/path/tp/apache-superset-{version/candidate}-source.tar.gz`
|
||||
|
||||
|
||||
If all goes well, you will see this result in your terminal:
|
||||
```bash
|
||||
SHA-512 verified
|
||||
RSA key verified
|
||||
```
|
||||
|
||||
There are also additional support scripts leveraging this to make it easy for those downloading a release to test it in-situ. You can do either of the following to validate these release assets:
|
||||
* `cd` into `superset-frontend` and run `npm run validate-release`
|
||||
* `cd` into `RELEASES` and run `./validate_this_release.sh`
|
||||
|
||||
## Publishing a successful release
|
||||
|
||||
Upon a successful vote, you'll have to copy the folder into the non-"dev/" folder.
|
||||
@@ -416,11 +432,6 @@ git tag -f ${SUPERSET_VERSION}
|
||||
git push origin ${SUPERSET_VERSION}
|
||||
```
|
||||
|
||||
### Update CHANGELOG and UPDATING on superset
|
||||
|
||||
Now that we have a final Apache source release we need to open a pull request on Superset
|
||||
with the changes on `CHANGELOG.md` and `UPDATING.md`.
|
||||
|
||||
### Publishing a Convenience Release to PyPI
|
||||
|
||||
Extract the release to the `/tmp` folder to build the PiPY release. Files in the `/tmp` folder will be automatically deleted by the OS.
|
||||
@@ -486,3 +497,9 @@ click the 3-dot icon and select `Create Release`, paste the content of the ANNOU
|
||||
release notes, and publish the new release.
|
||||
|
||||
At this point, a GitHub action will run that will check whether this release's version number is higher than the current 'latest' release. If that condition is true, this release sha will automatically be tagged as `latest` so that the most recent release can be referenced simply by using the 'latest' tag instead of looking up the version number. The existing version number tag will still exist, and can also be used for reference.
|
||||
|
||||
### Update Superset files
|
||||
|
||||
Now that we have a final Apache release we need to open a pull request on Superset with the changes on [CHANGELOG.m](../CHANGELOG.md) and [UPDATING.md](../UPDATING.md).
|
||||
|
||||
We also need to update the Environment section of [ISSUE_TEMPLATE/bug-report.yml](../.github/ISSUE_TEMPLATE//bug-report.yml) to reflect the new release changes. This includes removing versions that are not supported anymore and adding new ones.
|
||||
|
||||
@@ -35,6 +35,12 @@ The PyPI package:
|
||||
|
||||
https://pypi.org/project/apache-superset/
|
||||
|
||||
The Change Log for the release:
|
||||
https://github.com/apache/{{ project_module }}/blob/{{ version }}/CHANGELOG.md
|
||||
|
||||
The Updating instructions for the release:
|
||||
https://github.com/apache/{{ project_module }}/blob/{{ version }}/UPDATING.md
|
||||
|
||||
If you have any usage questions or have problems when upgrading or
|
||||
find any issues with enhancements included in this release, please
|
||||
don't hesitate to let us know by sending feedback to this mailing
|
||||
|
||||
@@ -28,13 +28,13 @@ Superset 2.0 is a big step forward. This release cleans up many legacy code path
|
||||
|
||||
## Developer Experience
|
||||
|
||||
- Addition of a statsd guage metric for Slack and email notifications for increased visibility into errors around alerts / reports ([#20158](https://github.com/apache/superset/pull/20158))
|
||||
- Addition of a statsd gauge metric for Slack and email notifications for increased visibility into errors around alerts / reports ([#20158](https://github.com/apache/superset/pull/20158))
|
||||
|
||||
- Helm chart now supports resource limits and requests for each component ([#20052](https://github.com/apache/superset/pull/20052))
|
||||
|
||||
- New Github workflow to test Storybook Netlify instance nightly ([#19852](https://github.com/apache/superset/pull/19852))
|
||||
- New GitHub workflow to test Storybook Netlify instance nightly ([#19852](https://github.com/apache/superset/pull/19852))
|
||||
|
||||
- Minimum requirement for Superset is now Python 3.8 ([#19017](https://github.com/apache/superset/pull/19017)
|
||||
- Minimum requirement for Superset is now Python 3.8 ([#19017](https://github.com/apache/superset/pull/19017))
|
||||
|
||||
## Features
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ under the License.
|
||||
- [#19898](https://github.com/apache/superset/pull/19898) feat: When editing the label/title in the Metrics popover, hitting Enter should save what you've typed (@diegomedina248)
|
||||
- [#16493](https://github.com/apache/superset/pull/16493) feat(plugin-chart-echarts): [feature-parity] support extra control for the area chart V2 (@stephenLYZ)
|
||||
- [#19855](https://github.com/apache/superset/pull/19855) feat(explore): Frontend implementation of dataset creation from infobox (@lyndsiWilliams)
|
||||
- [#20165](https://github.com/apache/superset/pull/20165) feat: add modfied col and timezone info to schedule col (@pkdotson)
|
||||
- [#20165](https://github.com/apache/superset/pull/20165) feat: add modified col and timezone info to schedule col (@pkdotson)
|
||||
- [#20144](https://github.com/apache/superset/pull/20144) feat: showing results pane in dashboard (@zhaoyongjie)
|
||||
- [#20242](https://github.com/apache/superset/pull/20242) feat: derived metrics use different line style (@zhaoyongjie)
|
||||
- [#20010](https://github.com/apache/superset/pull/20010) feat: standardized form_data (@zhaoyongjie)
|
||||
@@ -115,7 +115,7 @@ under the License.
|
||||
- [#19558](https://github.com/apache/superset/pull/19558) feat(explore): Redesign of Run/Save buttons (@kgabryje)
|
||||
- [#19650](https://github.com/apache/superset/pull/19650) feat(embedded): API get embedded dashboard config by uuid (@lilykuang)
|
||||
- [#19310](https://github.com/apache/superset/pull/19310) feat(CRUD): add new empty state (@stephenLYZ)
|
||||
- [#19622](https://github.com/apache/superset/pull/19622) feat(plugin-chart-echarts): add aggregate total for the Pie/Donuct chart (@stephenLYZ)
|
||||
- [#19622](https://github.com/apache/superset/pull/19622) feat(plugin-chart-echarts): add aggregate total for the Pie/Donut chart (@stephenLYZ)
|
||||
- [#19314](https://github.com/apache/superset/pull/19314) feat: Move Database Import option into DB Connection modal (@lyndsiWilliams)
|
||||
- [#19434](https://github.com/apache/superset/pull/19434) feat: deprecate old API and create new API for dashes created by me (@dpgaspar)
|
||||
- [#19482](https://github.com/apache/superset/pull/19482) feat: add success toast to alerts and reports (@pkdotson)
|
||||
@@ -181,7 +181,7 @@ under the License.
|
||||
- [#20204](https://github.com/apache/superset/pull/20204) fix: Fixes issue where results panel height was incorrect [sc-49045] (@eric-briscoe)
|
||||
- [#20235](https://github.com/apache/superset/pull/20235) fix: Box Plot Chart throws an error when the average (AVG) / SUM is being calculated on the Metrics (@diegomedina248)
|
||||
- [#20088](https://github.com/apache/superset/pull/20088) fix: datatype tracking issue on virtual dataset (@codemaster08240328)
|
||||
- [#20220](https://github.com/apache/superset/pull/20220) fix: dashbaord unable to refresh (@zhaoyongjie)
|
||||
- [#20220](https://github.com/apache/superset/pull/20220) fix: dashboard unable to refresh (@zhaoyongjie)
|
||||
- [#20228](https://github.com/apache/superset/pull/20228) fix: failed samples should throw exception (@zhaoyongjie)
|
||||
- [#20203](https://github.com/apache/superset/pull/20203) fix: move columns to datasource object for bootstrap data (@hughhhh)
|
||||
- [#20151](https://github.com/apache/superset/pull/20151) fix(csv): Ensure df_to_escaped_csv does not coerce integer columns to float (@john-bodley)
|
||||
@@ -191,7 +191,7 @@ under the License.
|
||||
- [#20206](https://github.com/apache/superset/pull/20206) fix(sql lab): SQL Lab Compile Query Delay (@diegomedina248)
|
||||
- [#20201](https://github.com/apache/superset/pull/20201) fix: unable to set destroyOnClose on ModalTrigger (@zhaoyongjie)
|
||||
- [#20186](https://github.com/apache/superset/pull/20186) fix(db): make to allow to show/hide the password when only creating (@prosdev0107)
|
||||
- [#20127](https://github.com/apache/superset/pull/20127) fix(database): retrival of tables and views from schema for exasol backend (@Nicoretti)
|
||||
- [#20127](https://github.com/apache/superset/pull/20127) fix(database): retrieval of tables and views from schema for exasol backend (@Nicoretti)
|
||||
- [#19899](https://github.com/apache/superset/pull/19899) fix: always create parameter json field (@pkdotson)
|
||||
- [#20173](https://github.com/apache/superset/pull/20173) fix: avoid while cycle in computeMaxFontSize for big Number run forever when css rule applied (@diegomedina248)
|
||||
- [#20086](https://github.com/apache/superset/pull/20086) fix(css): transparent linear gradient not working in safari (@stephenLYZ)
|
||||
@@ -298,7 +298,7 @@ under the License.
|
||||
- [#19570](https://github.com/apache/superset/pull/19570) fix: sqloxide optional (@betodealmeida)
|
||||
- [#19397](https://github.com/apache/superset/pull/19397) fix: weight tooltip issue (@codemaster08240328)
|
||||
- [#19313](https://github.com/apache/superset/pull/19313) fix(sql lab): increase the size of the action icons in the history tab (@diegomedina248)
|
||||
- [#19039](https://github.com/apache/superset/pull/19039) fix(explore): clean data when hidding control (@stephenLYZ)
|
||||
- [#19039](https://github.com/apache/superset/pull/19039) fix(explore): clean data when hiding control (@stephenLYZ)
|
||||
- [#19444](https://github.com/apache/superset/pull/19444) fix: Error Message is cut off in alerts & reports log page (@codemaster08240328)
|
||||
- [#19312](https://github.com/apache/superset/pull/19312) fix: adaptive formatting typo in explore dropdowns (@diegomedina248)
|
||||
- [#19534](https://github.com/apache/superset/pull/19534) fix(explore): Chart header icon paddings (@kgabryje)
|
||||
@@ -463,7 +463,7 @@ under the License.
|
||||
- [#19486](https://github.com/apache/superset/pull/19486) refactor: Removes the CSS files from the Treemap plugin (@michael-s-molina)
|
||||
- [#19488](https://github.com/apache/superset/pull/19488) refactor: Removes the CSS files from the Sunburst plugin (@michael-s-molina)
|
||||
- [#19490](https://github.com/apache/superset/pull/19490) chore: Add theme color to ParallelCoordinates (@geido)
|
||||
- [#19442](https://github.com/apache/superset/pull/19442) chore: Remove FilterbaleTableStyles.less (@geido)
|
||||
- [#19442](https://github.com/apache/superset/pull/19442) chore: Remove FilterableTableStyles.less (@geido)
|
||||
- [#19441](https://github.com/apache/superset/pull/19441) chore: Remove StyledQueryButton.less (@geido)
|
||||
- [#19473](https://github.com/apache/superset/pull/19473) refactor: Removes the CSS files from the Rose plugin (@michael-s-molina)
|
||||
- [#19466](https://github.com/apache/superset/pull/19466) chore: Removes hard-coded colors from legacy-plugin-chart-world-map (@michael-s-molina)
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
<!--
|
||||
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 3.1.0
|
||||
|
||||
Superset 3.1.0 brings a range of new features and quality of life improvements. This release is a minor version, meaning it doesn't include any breaking changes to ensure a seamless transition for our users. Here are some of the highlights of this release.
|
||||
|
||||
### Waterfall chart
|
||||
|
||||
The new [Waterfall chart](https://github.com/apache/superset/pull/25557) visualization provides a visual representation of how a value changes over time or across different categories. They are very helpful to show the cumulative effect of positive and negative changes from a starting value. Superset's Waterfall chart supports Breakdowns which can be used to analyze the contribution of different dimensions or factors to a specific metric. By breaking down the data into various categories or dimensions, you can identify the individual components that contribute to the overall variation or change in the metric.
|
||||
|
||||
The chart example below displays the total sales grouped by year and broken down by product line.
|
||||
|
||||

|
||||
|
||||
### Bubble Chart ECharts version
|
||||
|
||||
The new ECharts [Bubble chart](https://github.com/apache/superset/pull/22107) offers feature parity with the previous NVD3 version which should be removed in the next major release. This work is part of the [ECharts migration effort](https://github.com/apache/superset/issues/10418) to increase consistency and quality of our plugins. We'll add a migration to the new plugin soon which you'll be able to execute using the new CLI command.
|
||||
|
||||

|
||||
|
||||
### Improved Dataset selectors
|
||||
|
||||
The [dataset selectors](https://github.com/apache/superset/pull/25569) have been improved to also display the database and schema names which will help users locate the correct dataset, particularly when there are multiple tables/datasets with the same name that could benefit from disambiguation.
|
||||
|
||||

|
||||
|
||||
### SQL Lab improvements
|
||||
|
||||
SQL Lab received many user experience and performance improvements in this release. We’ll continue to improve the capabilities of SQL Lab with feedback from the community.
|
||||
|
||||
Now users can [automatically format](https://github.com/apache/superset/pull/25344) their SQL queries using the `Ctrl+Shift+F` shortcut or the Format SQL menu option available in the SQL configuration panel. Another improvement is that the results panel now shows the [executed query](https://github.com/apache/superset/pull/24787) which is very helpful when your SQL Lab editor has multiple queries.
|
||||
|
||||

|
||||
|
||||
In the SQL panel configurations, there's a menu option to show the [keyboard shortcuts](https://github.com/apache/superset/pull/25542) a user has access to.
|
||||
|
||||

|
||||
|
||||
SQL Lab has launched a non-blocking persistence mode, as outlined in [SIP-93](https://github.com/apache/superset/issues/21385). This enhancement ensures that your SQL editor content is preserved, even if your internet or service goes offline. Moreover, it improves user interaction by saving changes in a non-blocking way, similar to how Google Docs does.
|
||||
|
||||
Finally, the [SQL Lab module was moved to the Single Page Application](https://github.com/apache/superset/pull/25151) context. This means that both navigation and loading time of that module is significantly faster than previous versions (particularly when navigating to and from this page from other pages in Superset). This also reduces the number of requests to the server and pays some of our technical debt. Try it out! The difference is quite impressive!
|
||||
|
||||
### Country Map improvements
|
||||
|
||||
The Country Map visualization received some improvements in this release. The community added [France's regions](https://github.com/apache/superset/pull/25676) in addition to its departments and also many [Central Asia countries](https://github.com/apache/superset/pull/24870).
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="33%">France's regions</td>
|
||||
<td width="33%">Kazakhstan</td>
|
||||
<td width="33%">Kyrgyzstan</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="33%"><img src="media/france.png" width="100%"/></td>
|
||||
<td width="33%"><img src="media/kazakhstan.png" width="100%"></td>
|
||||
<td width="33%"><img src="media/kyrgyzstan.png" width="100%"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="33%">Tajikistan</td>
|
||||
<td width="33%">Turkmenistan</td>
|
||||
<td width="33%">Uzbekistan</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="33%"><img src="media/tajikistan.png" width="100%"/></td>
|
||||
<td width="33%"><img src="media/turkmenistan.png" width="100%"></td>
|
||||
<td width="33%"><img src="media/uzbekistan.png" width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### Deck.gl ContourLayer
|
||||
|
||||
We [added](https://github.com/apache/superset/pull/24154) the Deck.gl [ContourLayer](https://deck.gl/docs/api-reference/aggregation-layers/contour-layer) which aggregates data into Isolines or Isobands for a given threshold and cell size. By expanding the range of available [Deck.gl](https://deck.gl/) visualization layers, users will have more options to choose from when creating their visualizations. This will allow them to tailor their visualizations to their specific needs and explore their data in different ways.
|
||||
|
||||

|
||||
|
||||
### New Databases
|
||||
|
||||
Superset has added support for two new databases:
|
||||
|
||||
- [Databend](https://databend.rs/), an open-source, elastic, and workload-aware cloud data warehouse built in Rust. You can see the PR [here](https://github.com/apache/superset/pull/23308), and the updated documentation [here](https://superset.apache.org/docs/databases/databend).
|
||||
- [Apache Doris](https://doris.apache.org/), which is based on the MySQL protocol and introduces the concept of Multi Catalog. You can see the PR [here](https://github.com/apache/superset/pull/24714/) and the updated documentation [here](https://superset.apache.org/docs/databases/doris).
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="media/databend.png" width="100%"/></td>
|
||||
<td width="50%"><img src="media/doris.png" width="100%"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### CLI command to execute viz migrations
|
||||
|
||||
A new [CLI command](https://github.com/apache/superset/pull/25304) called viz-migrations was added to allow users to migrate charts of a specific type. This command is particularly helpful to migrate visualizations to their latest version and at the same time disable their legacy versions with the `VIZ_TYPE_DENYLIST` configuration. The main advantage of this command is that you can migrate your visualizations without needing to wait for a major release, where we generally remove the legacy plugins.
|
||||
|
||||
Currently, you can use the command to migrate Area, Bubble, Line, and Sunburst chart types but we'll add more as the ECharts migrations continue. Note that migrations for deprecated charts may be forced in upcoming major versions when the code is removed. Running migrations earlier will allow you to de-risk future upgrades while improving user experience.
|
||||
|
||||
```bash
|
||||
Usage: superset viz-migrations [OPTIONS] COMMAND [ARGS]...
|
||||
|
||||
Migrates a viz from one type to another.
|
||||
|
||||
Commands:
|
||||
downgrade Downgrades a viz to the previous version.
|
||||
upgrade Upgrade a viz to the latest version.
|
||||
```
|
||||
|
||||
Note: When migrating dashboards from one Superset instance to another (using import/export features or the Superset CLI), or restoring a backup of prior charts and dashboards, Superset will apply the existing migrations that are used during version upgrades. This will ensure that your charts and dashboards are using the latest and greatest charts that Superset officially supports.
|
||||
|
||||
### Database engine spec improvements
|
||||
|
||||
Many database engine improvements were added in this release. Some highlights:
|
||||
|
||||
- [feat: improve SQLite DB engine spec](https://github.com/apache/superset/pull/24909)
|
||||
- [feat: add MotherDuck DB engine spec](https://github.com/apache/superset/pull/24934)
|
||||
- [feat: Add week time grain for Elasticsearch datasets](https://github.com/apache/superset/pull/25683)
|
||||
- [feat: method for dynamic allows_alias_in_select](https://github.com/apache/superset/pull/25882)
|
||||
|
||||
We even added a new [CLI command](https://github.com/apache/superset/pull/24918) to test DB engine specs, SQLAlchemy dialects, and database connections.
|
||||
|
||||
```bash
|
||||
Usage: superset test-db [OPTIONS] SQLALCHEMY_URI
|
||||
|
||||
Run a series of tests against an analytical database.
|
||||
|
||||
This command tests:
|
||||
1. The Superset DB engine spec.
|
||||
2. The SQLAlchemy dialect.
|
||||
3. The database connectivity and performance.
|
||||
|
||||
It's useful for people developing DB engine specs and/or SQLAlchemy
|
||||
dialects, and also to test new versions of DB API 2.0 drivers.
|
||||
|
||||
Options:
|
||||
-c, --connect-args TEXT Connect args as JSON or YAML
|
||||
--help Show this message and exit.
|
||||
```
|
||||
|
||||
### Playwright as an alternative to Selenium
|
||||
|
||||
Per [SIP-98](https://github.com/apache/superset/issues/24948), we [introduced Playwright](https://github.com/apache/superset/pull/25247) for rendering charts in Superset reports. [Playwright](https://playwright.dev/) is an open-source library for automating web browsers, similar to Selenium but with better support for modern browser features and improved performance. By using Playwright, we aim to provide a more stable and accurate chart rendering experience in Superset reports, especially for [Deck.gl](https://deck.gl/) charts.
|
||||
|
||||
Since configuring Playwright requires installing additional dependencies, in order to prevent breaking changes in existing deployments, we put the new flow behind a feature flag called `PLAYWRIGHT_REPORTS_AND_THUMBNAILS`. Users that don't enable the feature flag will be unaffected by the changes.
|
||||
|
||||
### Pandas upgraded to v2
|
||||
|
||||
We [upgraded Pandas to v2](https://github.com/apache/superset/pull/24705) and [added performance dependencies](https://github.com/apache/superset/pull/24768) to provide speed improvements, especially when working with large data sets. For the full list of changes, check [Pandas 2.0.0 Release Notes](https://pandas.pydata.org/docs/dev/whatsnew/v2.0.0.html).
|
||||
|
||||
### Tags
|
||||
|
||||
Tags evolved a lot since 3.0, with many PRs that further improved the feature. During this phase, the community also made [great suggestions](https://github.com/apache/superset/discussions/25918) to make sure the feature is scalable, adhere to our security model, and offer a consistent design. We're still working on this feedback and new improvements will follow. For that reason, we're keeping the feature as beta behind the `TAGGING_SYSTEM` feature flag.
|
||||
|
After Width: | Height: | Size: 420 KiB |
|
After Width: | Height: | Size: 1011 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 411 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 258 KiB |
|
After Width: | Height: | Size: 299 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 463 KiB |
|
After Width: | Height: | Size: 200 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 319 KiB |
@@ -0,0 +1,54 @@
|
||||
# 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.
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Function to determine Python command
|
||||
get_python_command() {
|
||||
if command -v python3 &>/dev/null; then
|
||||
echo "python3"
|
||||
else
|
||||
echo "python"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to determine Pip command
|
||||
get_pip_command() {
|
||||
if command -v pip3 &>/dev/null; then
|
||||
echo "pip3"
|
||||
else
|
||||
echo "pip"
|
||||
fi
|
||||
}
|
||||
|
||||
PYTHON=$(get_python_command)
|
||||
PIP=$(get_pip_command)
|
||||
|
||||
# Get the release directory's path. If you unzip an Apache release and just run the npm script to validate the release, this will be a file name like `apache-superset-x.x.xrcx-source.tar.gz`
|
||||
RELEASE_DIR_NAME="../../$(basename "$(dirname "$(pwd)")").tar.gz"
|
||||
|
||||
# Install dependencies from requirements.txt if the file exists
|
||||
if [ -f "path/to/requirements.txt" ]; then
|
||||
echo "Installing Python dependencies..."
|
||||
$PYTHON -m $PIP install -r path/to/requirements.txt
|
||||
fi
|
||||
|
||||
# echo $PYTHON
|
||||
# echo $RELEASE_DIR_NAME
|
||||
|
||||
# Run the Python script with the parent directory name as an argument
|
||||
$PYTHON ../RELEASING/verify_release.py "$RELEASE_DIR_NAME"
|
||||
@@ -0,0 +1,101 @@
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import Optional
|
||||
|
||||
import requests
|
||||
|
||||
# Part 1: Verify SHA512 hash - this is the same as running `shasum -a 512 {release}` and comparing it against `{release}.sha512`
|
||||
|
||||
|
||||
def get_sha512_hash(filename: str) -> str:
|
||||
"""Run the shasum command on the file and return the SHA512 hash."""
|
||||
result = subprocess.run(["shasum", "-a", "512", filename], stdout=subprocess.PIPE)
|
||||
sha512_hash = result.stdout.decode().split()[0]
|
||||
return sha512_hash
|
||||
|
||||
|
||||
def read_sha512_file(filename: str) -> str:
|
||||
"""Read the corresponding .sha512 file and process its contents."""
|
||||
sha_filename = filename + ".sha512"
|
||||
with open(sha_filename) as file:
|
||||
lines = file.readlines()
|
||||
processed_sha = "".join(lines[1:]).replace(" ", "").replace("\n", "").lower()
|
||||
return processed_sha
|
||||
|
||||
|
||||
def verify_sha512(filename: str) -> str:
|
||||
"""Verify if the SHA512 hash of the file matches with the hash in the .sha512 file."""
|
||||
sha512_hash = get_sha512_hash(filename)
|
||||
sha512_file_content = read_sha512_file(filename)
|
||||
|
||||
if sha512_hash == sha512_file_content:
|
||||
return "SHA verified"
|
||||
else:
|
||||
return "SHA failed"
|
||||
|
||||
|
||||
# Part 2: Verify RSA key - this is the same as running `gpg --verify {release}.asc {release}` and comparing the RSA key and email address against the KEYS file
|
||||
|
||||
|
||||
def get_gpg_info(filename: str) -> tuple[Optional[str], Optional[str]]:
|
||||
"""Run the GPG verify command and extract RSA key and email address."""
|
||||
asc_filename = filename + ".asc"
|
||||
result = subprocess.run(
|
||||
["gpg", "--verify", asc_filename, filename], capture_output=True
|
||||
)
|
||||
output = result.stderr.decode()
|
||||
|
||||
rsa_key = re.search(r"RSA key ([0-9A-F]+)", output)
|
||||
email = re.search(r'issuer "([^"]+)"', output)
|
||||
|
||||
rsa_key_result = rsa_key.group(1) if rsa_key else None
|
||||
email_result = email.group(1) if email else None
|
||||
|
||||
# Debugging: print warnings if rsa_key or email is not found
|
||||
if rsa_key_result is None:
|
||||
print("Warning: No RSA key found in GPG verification output.")
|
||||
if email_result is None:
|
||||
print("Warning: No email address found in GPG verification output.")
|
||||
|
||||
return rsa_key_result, email_result
|
||||
|
||||
|
||||
def verify_rsa_key(rsa_key: str, email: Optional[str]) -> str:
|
||||
"""Fetch the KEYS file and verify if the RSA key and email match."""
|
||||
url = "https://downloads.apache.org/superset/KEYS"
|
||||
response = requests.get(url)
|
||||
if response.status_code == 200:
|
||||
if rsa_key not in response.text:
|
||||
return "RSA key not found on KEYS page"
|
||||
|
||||
# Check if email is None or not in response.text
|
||||
if email and email in response.text:
|
||||
return "RSA key and email verified against Apache KEYS file"
|
||||
elif email:
|
||||
return "RSA key verified, but Email not found on KEYS page"
|
||||
else:
|
||||
return "RSA key verified, but Email not available for verification"
|
||||
else:
|
||||
return "Failed to fetch KEYS file"
|
||||
|
||||
|
||||
def verify_sha512_and_rsa(filename: str) -> None:
|
||||
"""Verify SHA512 hash and RSA key."""
|
||||
sha_result = verify_sha512(filename)
|
||||
print(sha_result)
|
||||
|
||||
rsa_key, email = get_gpg_info(filename)
|
||||
if rsa_key:
|
||||
rsa_result = verify_rsa_key(rsa_key, email)
|
||||
print(rsa_result)
|
||||
else:
|
||||
print("GPG verification failed: RSA key or email not found")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python script.py <filename>")
|
||||
else:
|
||||
filename = sys.argv[1]
|
||||
verify_sha512_and_rsa(filename)
|
||||
@@ -28,7 +28,6 @@ These features are considered **unfinished** and should only be used on developm
|
||||
[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
|
||||
|
||||
- ENABLE_ADVANCED_DATA_TYPES
|
||||
- KV_STORE
|
||||
- PRESTO_EXPAND_DATA
|
||||
- SHARE_QUERIES_VIA_KV_STORE
|
||||
- TAGGING_SYSTEM
|
||||
@@ -43,15 +42,13 @@ These features are **finished** but currently being tested. They are usable, but
|
||||
- ALLOW_FULL_CSV_EXPORT
|
||||
- CACHE_IMPERSONATION
|
||||
- CONFIRM_DASHBOARD_DIFF
|
||||
- DASHBOARD_VIRTUALIZATION
|
||||
- DRILL_BY
|
||||
- DRILL_TO_DETAIL
|
||||
- DYNAMIC_PLUGINS: [(docs)](https://superset.apache.org/docs/installation/running-on-kubernetes)
|
||||
- ENABLE_JAVASCRIPT_CONTROLS
|
||||
- ESTIMATE_QUERY_COST
|
||||
- GENERIC_CHART_AXES
|
||||
- GLOBAL_ASYNC_QUERIES [(docs)](https://github.com/apache/superset/blob/master/CONTRIBUTING.md#async-chart-queries)
|
||||
- HORIZONTAL_FILTER_BAR
|
||||
- PLAYWRIGHT_REPORTS_AND_THUMBNAILS
|
||||
- RLS_IN_SQLLAB
|
||||
- SSH_TUNNELING [(docs)](https://superset.apache.org/docs/installation/setup-ssh-tunneling)
|
||||
- USE_ANALAGOUS_COLORS
|
||||
@@ -64,10 +61,11 @@ These features flags are **safe for production**. They have been tested and will
|
||||
|
||||
- ALERTS_ATTACH_REPORTS
|
||||
- ALLOW_ADHOC_SUBQUERY
|
||||
- DASHBOARD_CROSS_FILTERS
|
||||
- DASHBOARD_RBAC [(docs)](https://superset.apache.org/docs/creating-charts-dashboards/first-dashboard#manage-access-to-dashboards)
|
||||
- DASHBOARD_VIRTUALIZATION
|
||||
- DATAPANEL_CLOSED_BY_DEFAULT
|
||||
- DISABLE_LEGACY_DATASOURCE_EDITOR
|
||||
- DRILL_BY
|
||||
- DRUID_JOINS
|
||||
- EMBEDDABLE_CHARTS
|
||||
- EMBEDDED_SUPERSET
|
||||
@@ -85,15 +83,7 @@ These features flags currently default to True and **will be removed in a future
|
||||
|
||||
[//]: # "PLEASE KEEP THE LIST SORTED ALPHABETICALLY"
|
||||
|
||||
- CLIENT_CACHE
|
||||
- DASHBOARD_CACHE
|
||||
- DASHBOARD_FILTERS_EXPERIMENTAL
|
||||
- DASHBOARD_NATIVE_FILTERS
|
||||
- DASHBOARD_NATIVE_FILTERS_SET
|
||||
- DISABLE_DATASET_SOURCE_EDIT
|
||||
- ENABLE_EXPLORE_DRAG_AND_DROP
|
||||
- ENABLE_EXPLORE_JSON_CSRF_PROTECTION
|
||||
- ENABLE_TEMPLATE_REMOVE_FILTERS
|
||||
- DASHBOARD_CROSS_FILTERS
|
||||
- ENABLE_JAVASCRIPT_CONTROLS
|
||||
- GENERIC_CHART_AXES
|
||||
- REMOVE_SLICE_LEVEL_LABEL_COLORS
|
||||
- VERSIONED_EXPORT
|
||||
- KV_STORE
|
||||
|
||||
@@ -21,7 +21,7 @@ under the License.
|
||||
|
||||
Here's a list of organizations, broken down into broad industry categories, that have taken the time to send a PR to let
|
||||
the world know they are using Apache Superset. If you are a user and want to be recognized,
|
||||
all you have to do is file a simple PR [like this one](https://github.com/apache/superset/pull/10122). If you think
|
||||
all you have to do is file a simple PR [like this one](https://github.com/apache/superset/pull/10122) — [just click here](https://github.com/apache/superset/edit/master/RESOURCES/INTHEWILD.md) to do so. If you think
|
||||
the categorization is inaccurate, please file a PR with your correction as well.
|
||||
Join our growing community!
|
||||
|
||||
@@ -41,6 +41,7 @@ Join our growing community!
|
||||
- [Capital Service S.A.](http://capitalservice.pl) [@pkonarzewski]
|
||||
- [Clark.de](http://clark.de/)
|
||||
- [KarrotPay](https://www.daangnpay.com/)
|
||||
- [Taveo](https://www.taveo.com) [@codek]
|
||||
- [Wise](https://wise.com) [@koszti]
|
||||
- [Xendit](http://xendit.co/) [@LieAlbertTriAdrian]
|
||||
|
||||
@@ -77,6 +78,7 @@ Join our growing community!
|
||||
- [Careem](https://www.careem.com/) [@SamraHanifCareem]
|
||||
- [Cloudsmith](https://cloudsmith.io) [@alancarson]
|
||||
- [CnOvit](http://www.cnovit.com/) [@xieshaohu]
|
||||
- [Cyberhaven](https://www.cyberhaven.com/) [@toliver-ch]
|
||||
- [Deepomatic](https://deepomatic.com/) [@Zanoellia]
|
||||
- [Dial Once](https://www.dial-once.com/)
|
||||
- [Dremio](https://dremio.com) [@narendrans]
|
||||
@@ -101,6 +103,7 @@ Join our growing community!
|
||||
- [Preset, Inc.](https://preset.io)
|
||||
- [Pronto Tools](http://www.prontotools.io) [@zkan]
|
||||
- [PubNub](https://pubnub.com) [@jzucker2]
|
||||
- [ReadyTech](https://www.readytech.io)
|
||||
- [Reward Gateway](https://www.rewardgateway.com)
|
||||
- [ScopeAI](https://www.getscopeai.com) [@iloveluce]
|
||||
- [Showmax](https://tech.showmax.com) [@bobek]
|
||||
@@ -108,6 +111,7 @@ Join our growing community!
|
||||
- [Steamroot](https://streamroot.io/)
|
||||
- [TechAudit](https://www.techaudit.info) [@ETselikov]
|
||||
- [Tenable](https://www.tenable.com) [@dflionis]
|
||||
- [Tentacle](https://public.tentaclecmi.com) [@jdclarke5]
|
||||
- [timbr.ai](https://timbr.ai/) [@semantiDan]
|
||||
- [Tobii](http://www.tobii.com/) [@dwa]
|
||||
- [Tooploox](https://www.tooploox.com/) [@jakubczaplicki]
|
||||
@@ -128,8 +132,6 @@ Join our growing community!
|
||||
- [Xite](https://xite.com/) [@shashankkoppar]
|
||||
- [Zaihang](http://www.zaih.com/)
|
||||
|
||||
|
||||
|
||||
### Education
|
||||
- [Brilliant.org](https://brilliant.org/)
|
||||
- [Platzi.com](https://platzi.com/)
|
||||
@@ -144,6 +146,7 @@ Join our growing community!
|
||||
- [DouroECI](https://www.douroeci.com/) [@nunohelibeires]
|
||||
- [Safaricom](https://www.safaricom.co.ke/) [@mmutiso]
|
||||
- [Scoot](https://scoot.co/) [@haaspt]
|
||||
- [Wattbewerb](https://wattbewerb.de/) [@wattbewerb]
|
||||
|
||||
### Healthcare
|
||||
- [Amino](https://amino.com) [@shkr]
|
||||
@@ -168,10 +171,13 @@ Join our growing community!
|
||||
|
||||
### Others
|
||||
- [AI inside](https://inside.ai/en/)
|
||||
- [Automattic](https://automattic.com/) [@Khrol, @Usiel]
|
||||
- [Dropbox](https://www.dropbox.com/) [@bkyryliuk]
|
||||
- [Grassroot](https://www.grassrootinstitute.org/)
|
||||
- [Increff](https://www.increff.com/) [@ishansinghania]
|
||||
- [komoot](https://www.komoot.com/) [@christophlingg]
|
||||
- [Let's Roam](https://www.letsroam.com/)
|
||||
- [Onebeat](https://1beat.com/) [@GuyAttia]
|
||||
- [Twitter](https://twitter.com/)
|
||||
- [VLMedia](https://www.vlmedia.com.tr/) [@ibotheperfect]
|
||||
- [Yahoo!](https://yahoo.com/)
|
||||
|
||||
@@ -1,216 +1,210 @@
|
||||
||Admin|Alpha|Gamma|SQL_LAB|
|
||||
|---|---|---|---|---|
|
||||
|Permission/role description|Admins have all possible rights, including granting or revoking rights from other users and altering other people’s slices and dashboards.| Alpha users have access to all data sources, but they cannot grant or revoke access from other users. They are also limited to altering the objects that they own. Alpha users can add and alter data sources.|Gamma users have limited access. They can only consume data coming from data sources they have been given access to through another complementary role. They only have access to view the slices and dashboards made from data sources that they have access to. Currently Gamma users are not able to alter or add data sources. We assume that they are mostly content consumers, though they can create slices and dashboards.|The sql_lab role grants access to SQL Lab. Note that while Admin users have access to all databases by default, both Alpha and Gamma users need to be given access on a per database basis.||
|
||||
|can read on SavedQuery|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can write on SavedQuery|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can read on CssTemplate|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on CssTemplate|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on ReportSchedule|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on ReportSchedule|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on Chart|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on Chart|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on Annotation|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on Annotation|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on Dataset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on Dataset|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can read on Log|:heavy_check_mark:|O|O|O|
|
||||
|can write on Log|:heavy_check_mark:|O|O|O|
|
||||
|can read on Dashboard|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on Dashboard|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on Database|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can write on Database|:heavy_check_mark:|O|O|O|
|
||||
|can read on Query|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can this form get on ResetPasswordView|:heavy_check_mark:|O|O|O|
|
||||
|can this form post on ResetPasswordView|:heavy_check_mark:|O|O|O|
|
||||
|can this form get on ResetMyPasswordView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form post on ResetMyPasswordView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form get on UserInfoEditView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form post on UserInfoEditView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can show on UserDBModelView|:heavy_check_mark:|O|O|O|
|
||||
|can edit on UserDBModelView|:heavy_check_mark:|O|O|O|
|
||||
|can delete on UserDBModelView|:heavy_check_mark:|O|O|O|
|
||||
|can add on UserDBModelView|:heavy_check_mark:|O|O|O|
|
||||
|can list on UserDBModelView|:heavy_check_mark:|O|O|O|
|
||||
|can userinfo on UserDBModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|resetmypassword on UserDBModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|resetpasswords on UserDBModelView|:heavy_check_mark:|O|O|O|
|
||||
|userinfoedit on UserDBModelView|:heavy_check_mark:|O|O|O|
|
||||
|can show on RoleModelView|:heavy_check_mark:|O|O|O|
|
||||
|can edit on RoleModelView|:heavy_check_mark:|O|O|O|
|
||||
|can delete on RoleModelView|:heavy_check_mark:|O|O|O|
|
||||
|can add on RoleModelView|:heavy_check_mark:|O|O|O|
|
||||
|can list on RoleModelView|:heavy_check_mark:|O|O|O|
|
||||
|copyrole on RoleModelView|:heavy_check_mark:|O|O|O|
|
||||
|can get on OpenApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can show on SwaggerView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can get on MenuApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can list on AsyncEventsRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can invalidate on CacheRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can function names on Database|:heavy_check_mark:|O|O|O|
|
||||
|can query form data on Api|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can query on Api|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can time range on Api|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form get on CsvToDatabaseView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form post on CsvToDatabaseView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form get on ExcelToDatabaseView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form post on ExcelToDatabaseView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can external metadata on Datasource|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can save on Datasource|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can get on Datasource|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can shortner on R|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can my queries on SqlLab|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can log on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can schemas access for csv upload on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can import dashboards on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can schemas on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can sqllab history on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can publish on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can csv on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can slice on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can sync druid source on Superset|:heavy_check_mark:|O|O|O|
|
||||
|can explore on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can approve on Superset|:heavy_check_mark:|O|O|O|
|
||||
|can explore json on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can fetch datasource metadata on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can csrf token on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can sqllab on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can select star on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can warm up cache on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can sqllab table viz on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can profile on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can available domains on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can request access on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can dashboard on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can post on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can expanded on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can delete on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can get on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can post on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can delete query on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can migrate query on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can activate on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can delete on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can put on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can read on SecurityRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|menu access on Security|:heavy_check_mark:|O|O|O|
|
||||
|menu access on List Users|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on List Roles|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Action Log|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Manage|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|menu access on Annotation Layers|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on CSS Templates|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|menu access on Import Dashboards|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Data|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Databases|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Datasets|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Upload a CSV|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|menu access on Upload Excel|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Charts|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Dashboards|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on SQL Lab|:heavy_check_mark:|O|O|:heavy_check_mark:|
|
||||
|menu access on SQL Editor|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|menu access on Saved Queries|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|menu access on Query Search|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|all datasource access on all_datasource_access|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|all database access on all_database_access|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|all query access on all_query_access|:heavy_check_mark:|O|O|O|
|
||||
|can edit on UserOAuthModelView|:heavy_check_mark:|O|O|O|
|
||||
|can list on UserOAuthModelView|:heavy_check_mark:|O|O|O|
|
||||
|can show on UserOAuthModelView|:heavy_check_mark:|O|O|O|
|
||||
|can userinfo on UserOAuthModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can add on UserOAuthModelView|:heavy_check_mark:|O|O|O|
|
||||
|can delete on UserOAuthModelView|:heavy_check_mark:|O|O|O|
|
||||
|userinfoedit on UserOAuthModelView|:heavy_check_mark:|O|O|O|
|
||||
|can write on DynamicPlugin|:heavy_check_mark:|O|O|O|
|
||||
|can edit on DynamicPlugin|:heavy_check_mark:|O|O|O|
|
||||
|can list on DynamicPlugin|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can show on DynamicPlugin|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can download on DynamicPlugin|:heavy_check_mark:|O|O|O|
|
||||
|can add on DynamicPlugin|:heavy_check_mark:|O|O|O|
|
||||
|can delete on DynamicPlugin|:heavy_check_mark:|O|O|O|
|
||||
|can edit on RowLevelSecurityFiltersModelView|:heavy_check_mark:|O|O|O|
|
||||
|can list on RowLevelSecurityFiltersModelView|:heavy_check_mark:|O|O|O|
|
||||
|can show on RowLevelSecurityFiltersModelView|:heavy_check_mark:|O|O|O|
|
||||
|can download on RowLevelSecurityFiltersModelView|:heavy_check_mark:|O|O|O|
|
||||
|can add on RowLevelSecurityFiltersModelView|:heavy_check_mark:|O|O|O|
|
||||
|can delete on RowLevelSecurityFiltersModelView|:heavy_check_mark:|O|O|O|
|
||||
|muldelete on RowLevelSecurityFiltersModelView|:heavy_check_mark:|O|O|O|
|
||||
|can external metadata by name on Datasource|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can get value on KV|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can store on KV|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can tagged objects on TagView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can suggestions on TagView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can get on TagView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can post on TagView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can delete on TagView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can edit on DashboardEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can list on DashboardEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can show on DashboardEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can add on DashboardEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can delete on DashboardEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|muldelete on DashboardEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can edit on SliceEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can list on SliceEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can show on SliceEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can add on SliceEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can delete on SliceEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|muldelete on SliceEmailScheduleView|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can edit on AlertModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can list on AlertModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can show on AlertModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can add on AlertModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can delete on AlertModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can list on AlertLogModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can show on AlertLogModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can list on AlertObservationModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can show on AlertObservationModelView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Row Level Security|:heavy_check_mark:|O|O|O|
|
||||
|menu access on Access requests|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Home|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Plugins|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Dashboard Email Schedules|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Chart Emails|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Alerts|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Alerts & Report|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Scan New Datasources|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can share dashboard on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can share chart on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can list on FilterSets|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can add on FilterSets|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can delete on FilterSets|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can edit on FilterSets|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form get on ColumnarToDatabaseView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can this form post on ColumnarToDatabaseView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|menu access on Upload a Columnar file|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can export on Chart|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on DashboardFilterStateRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on DashboardFilterStateRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on DashboardPermalinkRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on DashboardPermalinkRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can delete embedded on Dashboard|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can set embedded on Dashboard|:heavy_check_mark:|O|O|O|
|
||||
|can export on Dashboard|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can get embedded on Dashboard|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can export on Database|:heavy_check_mark:|O|O|O|
|
||||
|can export on Dataset|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can write on ExploreFormDataRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on ExploreFormDataRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can write on ExplorePermalinkRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on ExplorePermalinkRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can export on ImportExportRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can import on ImportExportRestApi|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can export on SavedQuery|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|
||||
|can dashboard permalink on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can grant guest token on SecurityRestApi|:heavy_check_mark:|O|O|O|
|
||||
|can read on AdvancedDataType|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can read on EmbeddedDashboard|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can duplicate on Dataset|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can read on Explore|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can samples on Datasource|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can read on AvailableDomains|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
|can get or create dataset on Dataset|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can get column values on Datasource|:heavy_check_mark:|:heavy_check_mark:|O|O|
|
||||
|can export csv on SQLLab|:heavy_check_mark:|O|O|:heavy_check_mark:|
|
||||
|can get results on SQLLab|:heavy_check_mark:|O|O|:heavy_check_mark:|
|
||||
|can execute sql query on SQLLab|:heavy_check_mark:|O|O|:heavy_check_mark:|
|
||||
|can recent activity on Log|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|
||||
| | Admin | Alpha | Gamma | SQL_LAB |
|
||||
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- |
|
||||
| Permission/role description | Admins have all possible rights, including granting or revoking rights from other users and altering other people’s slices and dashboards. | Alpha users have access to all data sources, but they cannot grant or revoke access from other users. They are also limited to altering the objects that they own. Alpha users can add and alter data sources. | Gamma users have limited access. They can only consume data coming from data sources they have been given access to through another complementary role. They only have access to view the slices and dashboards made from data sources that they have access to. Currently Gamma users are not able to alter or add data sources. We assume that they are mostly content consumers, though they can create slices and dashboards. | The sql_lab role grants access to SQL Lab. Note that while Admin users have access to all databases by default, both Alpha and Gamma users need to be given access on a per database basis. | |
|
||||
| can read on SavedQuery | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can write on SavedQuery | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can read on CssTemplate | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on CssTemplate | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on ReportSchedule | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on ReportSchedule | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on Chart | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on Chart | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on Annotation | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on Annotation | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on Dataset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on Dataset | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can read on Log | :heavy_check_mark: | O | O | O |
|
||||
| can write on Log | :heavy_check_mark: | O | O | O |
|
||||
| can read on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on Database | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can write on Database | :heavy_check_mark: | O | O | O |
|
||||
| can read on Query | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can this form get on ResetPasswordView | :heavy_check_mark: | O | O | O |
|
||||
| can this form post on ResetPasswordView | :heavy_check_mark: | O | O | O |
|
||||
| can this form get on ResetMyPasswordView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on ResetMyPasswordView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form get on UserInfoEditView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on UserInfoEditView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can edit on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can delete on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can add on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can list on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can userinfo on UserDBModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| resetmypassword on UserDBModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| resetpasswords on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| userinfoedit on UserDBModelView | :heavy_check_mark: | O | O | O |
|
||||
| can show on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can edit on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can delete on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can add on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can list on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| copyrole on RoleModelView | :heavy_check_mark: | O | O | O |
|
||||
| can get on OpenApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on SwaggerView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get on MenuApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on AsyncEventsRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can invalidate on CacheRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can function names on Database | :heavy_check_mark: | O | O | O |
|
||||
| can query form data on Api | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can query on Api | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can time range on Api | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form get on CsvToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on CsvToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form get on ExcelToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on ExcelToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can external metadata on Datasource | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can save on Datasource | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can get on Datasource | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can my queries on SqlLab | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can log on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can schemas access for csv upload on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can import dashboards on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can schemas on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can sqllab history on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can publish on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can csv on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can slice on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can sync druid source on Superset | :heavy_check_mark: | O | O | O |
|
||||
| can explore on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can approve on Superset | :heavy_check_mark: | O | O | O |
|
||||
| can explore json on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can fetch datasource metadata on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can csrf token on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can sqllab on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can select star on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can warm up cache on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can sqllab table viz on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can available domains on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can request access on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can dashboard on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can post on TableSchemaView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can expanded on TableSchemaView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can delete on TableSchemaView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can get on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can post on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can delete query on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can migrate query on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can activate on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can delete on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can put on TabStateView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can read on SecurityRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| menu access on Security | :heavy_check_mark: | O | O | O |
|
||||
| menu access on List Users | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on List Roles | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Action Log | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Manage | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| menu access on Annotation Layers | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on CSS Templates | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| menu access on Import Dashboards | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Data | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Databases | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Datasets | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Upload a CSV | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| menu access on Upload Excel | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Charts | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Dashboards | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on SQL Lab | :heavy_check_mark: | O | O | :heavy_check_mark: |
|
||||
| menu access on SQL Editor | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| menu access on Saved Queries | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| menu access on Query Search | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| all datasource access on all_datasource_access | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| all database access on all_database_access | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| all query access on all_query_access | :heavy_check_mark: | O | O | O |
|
||||
| can edit on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can list on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can show on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can userinfo on UserOAuthModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can add on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can delete on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| userinfoedit on UserOAuthModelView | :heavy_check_mark: | O | O | O |
|
||||
| can write on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can edit on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can list on DynamicPlugin | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on DynamicPlugin | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can download on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can add on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can delete on DynamicPlugin | :heavy_check_mark: | O | O | O |
|
||||
| can edit on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can list on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can show on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can download on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can add on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can delete on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| muldelete on RowLevelSecurityFiltersModelView | :heavy_check_mark: | O | O | O |
|
||||
| can external metadata by name on Datasource | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get value on KV | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can store on KV | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can tagged objects on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can suggestions on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can post on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete on TagView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can edit on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can add on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| muldelete on DashboardEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can edit on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can add on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| muldelete on SliceEmailScheduleView | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can edit on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can add on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete on AlertModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on AlertLogModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on AlertLogModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can list on AlertObservationModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can show on AlertObservationModelView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Row Level Security | :heavy_check_mark: | O | O | O |
|
||||
| menu access on Access requests | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Home | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Plugins | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Dashboard Email Schedules | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Chart Emails | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Alerts | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Alerts & Report | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Scan New Datasources | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can share dashboard on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can share chart on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form get on ColumnarToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can this form post on ColumnarToDatabaseView | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| menu access on Upload a Columnar file | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can export on Chart | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on DashboardFilterStateRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on DashboardFilterStateRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on DashboardPermalinkRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on DashboardPermalinkRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can delete embedded on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can set embedded on Dashboard | :heavy_check_mark: | O | O | O |
|
||||
| can export on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get embedded on Dashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can export on Database | :heavy_check_mark: | O | O | O |
|
||||
| can export on Dataset | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can write on ExploreFormDataRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on ExploreFormDataRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can write on ExplorePermalinkRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on ExplorePermalinkRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can export on ImportExportRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can import on ImportExportRestApi | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can export on SavedQuery | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||
| can dashboard permalink on Superset | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can grant guest token on SecurityRestApi | :heavy_check_mark: | O | O | O |
|
||||
| can read on AdvancedDataType | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can read on EmbeddedDashboard | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can duplicate on Dataset | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can read on Explore | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can samples on Datasource | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can read on AvailableDomains | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
| can get or create dataset on Dataset | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can get column values on Datasource | :heavy_check_mark: | :heavy_check_mark: | O | O |
|
||||
| can export csv on SQLLab | :heavy_check_mark: | O | O | :heavy_check_mark: |
|
||||
| can get results on SQLLab | :heavy_check_mark: | O | O | :heavy_check_mark: |
|
||||
| can execute sql query on SQLLab | :heavy_check_mark: | O | O | :heavy_check_mark: |
|
||||
| can recent activity on Log | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | O |
|
||||
|
||||
@@ -24,9 +24,51 @@ assists people when migrating to a new version.
|
||||
|
||||
## Next
|
||||
|
||||
- [26450](https://github.com/apache/superset/pull/26450): Deprecates the `KV_STORE` feature flag and its related assets such as the API endpoint and `keyvalue` table. The main dependency of this feature is the `SHARE_QUERIES_VIA_KV_STORE` feature flag which allows sharing SQL Lab queries without the necessity of saving the query. Our intention is to use the permalink feature to implement this use case before 5.0 and that's why we are deprecating the feature flag now.
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- [26347](https://github.com/apache/superset/issues/26347): Removes the deprecated `VERSIONED_EXPORT` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
- [26328](https://github.com/apache/superset/issues/26328): Removes the deprecated Filter Box code and it's associated dependencies `react-select` and `array-move`. It also removes the `DeprecatedSelect` and `AsyncSelect` components that were exclusively used by filter boxes. Existing filter boxes will be automatically migrated to native filters.
|
||||
- [26330](https://github.com/apache/superset/issues/26330): Removes the deprecated `DASHBOARD_FILTERS_EXPERIMENTAL` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26344](https://github.com/apache/superset/issues/26344): Removes the deprecated `ENABLE_EXPLORE_JSON_CSRF_PROTECTION` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26345](https://github.com/apache/superset/issues/26345): Removes the deprecated `ENABLE_TEMPLATE_REMOVE_FILTERS` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
- [26346](https://github.com/apache/superset/issues/26346): Removes the deprecated `REMOVE_SLICE_LEVEL_LABEL_COLORS` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26348](https://github.com/apache/superset/issues/26348): Removes the deprecated `CLIENT_CACHE` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26349](https://github.com/apache/superset/issues/26349): Removes the deprecated `DASHBOARD_CACHE` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26369](https://github.com/apache/superset/issues/26369): Removes the Filter Sets feature including the deprecated `DASHBOARD_NATIVE_FILTERS_SET` feature flag and all related API endpoints. The feature is permanently removed as it was not being actively maintained, it was not widely used, and it was full of bugs. We also considered that if we were to provide a similar feature, it would be better to re-implement it from scratch given the amount of technical debt that the current implementation has. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26343](https://github.com/apache/superset/issues/26343): Removes the deprecated `ENABLE_EXPLORE_DRAG_AND_DROP` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
- [26331](https://github.com/apache/superset/issues/26331): Removes the deprecated `DISABLE_DATASET_SOURCE_EDIT` feature flag. The previous value of the feature flag was `False` and now the feature is permanently removed.
|
||||
- [26636](https://github.com/apache/superset/issues/26636): Sets the `DASHBOARD_VIRTUALIZATION` feature flag to `True` by default. This feature was introduced by [21438](https://github.com/apache/superset/pull/21438) and will enable virtualization when rendering a dashboard's charts in an attempt to reduce the number of elements (DOM nodes) rendered at once. This is especially useful for large dashboards.
|
||||
- [26637](https://github.com/apache/superset/issues/26637): Sets the `DRILL_BY` feature flag to `True` by default given that the feature has been tested for a while and reached a stable state.
|
||||
- [26462](https://github.com/apache/superset/issues/26462): Removes the Profile feature given that it's not actively maintained and not widely used.
|
||||
- [26377](https://github.com/apache/superset/pull/26377): Removes the deprecated Redirect API that supported short URLs used before the permalink feature.
|
||||
- [26329](https://github.com/apache/superset/issues/26329): Removes the deprecated `DASHBOARD_NATIVE_FILTERS` feature flag. The previous value of the feature flag was `True` and now the feature is permanently enabled.
|
||||
|
||||
### Potential Downtime
|
||||
|
||||
- [26416](https://github.com/apache/superset/pull/26416): adds 2 database indexes to report_execution_log and 1 to report_recipient to improve performance, this may cause downtime on large deployments.
|
||||
|
||||
## 3.1.0
|
||||
|
||||
- [24657](https://github.com/apache/superset/pull/24657): Bumps the cryptography package to augment the OpenSSL security vulnerability.
|
||||
|
||||
### Other
|
||||
|
||||
- [24982](https://github.com/apache/superset/pull/24982): By default, physical datasets on Oracle-like dialects like Snowflake will now use denormalized column names. However, existing datasets won't be affected. To change this behavior, the "Advanced" section on the dataset modal has a "Normalize column names" flag which can be changed to change this behavior.
|
||||
|
||||
## 3.0.3
|
||||
|
||||
- [26034](https://github.com/apache/superset/issues/26034): Fixes a problem where numeric x-axes were being treated as categorical values. As a consequence of that, the way labels are displayed might change given that ECharts has a different treatment for numerical and categorical values. To revert to the old behavior, users need to manually convert numerical columns to text so that they are treated as categories. Check https://github.com/apache/superset/issues/26159 for more details.
|
||||
|
||||
## 3.0.0
|
||||
|
||||
- [25053](https://github.com/apache/superset/pull/25053): Extends the `ab_user.email` column from 64 to 320 characters which has an associated unique key constraint. This will be problematic for MySQL metadata databases which use the InnoDB storage engine with the `innodb_large_prefix` parameter disabled as the key prefix limit is 767 bytes. Enabling said parameter and ensuring that the table uses either the `DYNAMIC` or `COMPRESSED` row format should remedy the problem. See [here](https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html) for more details.
|
||||
- [24911](https://github.com/apache/superset/pull/24911): Changes the column type from `TEXT` to `MediumText` in table `logs`, potentially requiring a table lock on MySQL dbs or taking some time to complete on large deployments.
|
||||
- [24939](https://github.com/apache/superset/pull/24939): Augments the foreign key constraints for the `embedded_dashboards` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dashboard is deleted. Scheduled downtime may be advised.
|
||||
- [24938](https://github.com/apache/superset/pull/24938): Augments the foreign key constraints for the `dashboard_slices` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dashboard or slice is deleted. Scheduled downtime may be advised.
|
||||
- [24628]https://github.com/apache/superset/pull/24628): Augments the foreign key constraints for the `dashboard_owner`, `report_schedule_owner`, and `slice_owner` tables to include an explicit CASCADE ON DELETE to ensure the relevant ownership records are deleted when a dataset is deleted. Scheduled downtime may be advised.
|
||||
- [24488](https://github.com/apache/superset/pull/24488): Augments the foreign key constraints for the `sql_metrics`, `sqlatable_user`, and `table_columns` tables which reference the `tables` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dataset is deleted. Scheduled downtime may be advised.
|
||||
- [24335](https://github.com/apache/superset/pull/24335): Removed deprecated API `/superset/filter/<datasource_type>/<int:datasource_id>/<column>/`
|
||||
- [24185](https://github.com/apache/superset/pull/24185): `/api/v1/database/test_connection` and `api/v1/database/validate_parameters` permissions changed from `can_read` to `can_write`. Only Admin user's have access.
|
||||
- [24232](https://github.com/apache/superset/pull/24232): Enables ENABLE_TEMPLATE_REMOVE_FILTERS, DRILL_TO_DETAIL, DASHBOARD_CROSS_FILTERS by default, marks VERSIONED_EXPORT and ENABLE_TEMPLATE_REMOVE_FILTERS as deprecated.
|
||||
- [23652](https://github.com/apache/superset/pull/23652): Enables GENERIC_CHART_AXES feature flag by default.
|
||||
- [23226](https://github.com/apache/superset/pull/23226): Migrated endpoint `/estimate_query_cost/<int:database_id>` to `/api/v1/sqllab/estimate/`. Corresponding permissions are can estimate query cost on SQLLab. Make sure you add/replace the necessary permissions on any custom roles you may have.
|
||||
@@ -34,12 +76,14 @@ assists people when migrating to a new version.
|
||||
- [24404](https://github.com/apache/superset/pull/24404): FLASK_ENV is getting
|
||||
deprecated, we recommend using SUPERSET_ENV and reviewing your
|
||||
config for ENVIRONMENT_TAG_CONFIG, which enables adding a tag in the navbar to
|
||||
make it more clear which envrionment your are in.
|
||||
make it more clear which environment your are in.
|
||||
`SUPERSET_ENV=production` and `SUPERSET_ENV=development` are the two
|
||||
supported switches based on the default config.
|
||||
- [19242](https://github.com/apache/superset/pull/19242): Adhoc subqueries are now disabled by default for security reasons. To enable them, set the feature flag `ALLOW_ADHOC_SUBQUERY` to `True`.
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- [24686]https://github.com/apache/superset/pull/24686): All dataset's custom explore_url are handled as relative URLs on the frontend, behaviour controlled by PREVENT_UNSAFE_DEFAULT_URLS_ON_DATASET.
|
||||
- [24262](https://github.com/apache/superset/pull/24262): Enabled `TALISMAN_ENABLED` flag by default and provided stricter default Content Security Policy
|
||||
- [24415](https://github.com/apache/superset/pull/24415): Removed the obsolete Druid NoSQL REGEX operator.
|
||||
- [24423](https://github.com/apache/superset/pull/24423): Removed deprecated APIs `/superset/slice_json/...`, `/superset/annotation_json/...`
|
||||
@@ -70,10 +114,14 @@ assists people when migrating to a new version.
|
||||
- [23663](https://github.com/apache/superset/pull/23663): Removes deprecated feature flags `ALLOW_DASHBOARD_DOMAIN_SHARDING`, `DISPLAY_MARKDOWN_HTML`, and `FORCE_DATABASE_CONNECTIONS_SSL`.
|
||||
- [22325](https://github.com/apache/superset/pull/22325): "RLS_FORM_QUERY_REL_FIELDS" is replaced by "RLS_BASE_RELATED_FIELD_FILTERS" feature flag. Its value format stays same.
|
||||
|
||||
### Potential Downtime
|
||||
## 2.1.1
|
||||
|
||||
- [24185](https://github.com/apache/superset/pull/24185): `/api/v1/database/test_connection` and `api/v1/database/validate_parameters` permissions changed from `can_read` to `can_write`. Only Admin user's have access.
|
||||
|
||||
### Other
|
||||
|
||||
- [23888](https://github.com/apache/superset/pull/23888): Database Migration for json serialization instead of pickle should upgrade/downgrade correctly when bumping to/from this patch version
|
||||
|
||||
## 2.1.0
|
||||
|
||||
- [22809](https://github.com/apache/superset/pull/22809): Migrated endpoint `/superset/sql_json` and `/superset/results/` to `/api/v1/sqllab/execute/` and `/api/v1/sqllab/results/` respectively. Corresponding permissions are `can sql_json on Superset` to `can execute on SQLLab`, `can results on Superset` to `can results on SQLLab`. Make sure you add/replace the necessary permissions on any custom roles you may have.
|
||||
@@ -108,7 +156,7 @@ assists people when migrating to a new version.
|
||||
|
||||
## 2.0.1
|
||||
|
||||
- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by Github. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
|
||||
- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by GitHub. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
@@ -129,8 +177,8 @@ assists people when migrating to a new version.
|
||||
- [19770](https://github.com/apache/superset/pull/19770): Per [SIP-11](https://github.com/apache/superset/issues/6032) and [SIP-68](https://github.com/apache/superset/issues/14909), the native NoSQL Druid connector is deprecated and has been removed. Druid is still supported through SQLAlchemy via pydruid. The config keys `DRUID_IS_ACTIVE` and `DRUID_METADATA_LINKS_ENABLED` have also been removed.
|
||||
- [19274](https://github.com/apache/superset/pull/19274): The `PUBLIC_ROLE_LIKE_GAMMA` config key has been removed, set `PUBLIC_ROLE_LIKE = "Gamma"` to have the same functionality.
|
||||
- [19273](https://github.com/apache/superset/pull/19273): The `SUPERSET_CELERY_WORKERS` and `SUPERSET_WORKERS` config keys has been removed. Configure Celery directly using `CELERY_CONFIG` on Superset.
|
||||
- [19231](https://github.com/apache/superset/pull/19231): The `ENABLE_REACT_CRUD_VIEWS` feature flag has been removed (premantly enabled). Any deployments which had set this flag to false will need to verify that the React views support their use case.
|
||||
- [19230](https://github.com/apache/superset/pull/19230): The `ROW_LEVEL_SECURITY` feature flag has been removed (permantly enabled). Any deployments which had set this flag to false will need to verify that the presence of the Row Level Security feature does not interfere with their use case.
|
||||
- [19231](https://github.com/apache/superset/pull/19231): The `ENABLE_REACT_CRUD_VIEWS` feature flag has been removed (permanently enabled). Any deployments which had set this flag to false will need to verify that the React views support their use case.
|
||||
- [19230](https://github.com/apache/superset/pull/19230): The `ROW_LEVEL_SECURITY` feature flag has been removed (permanently enabled). Any deployments which had set this flag to false will need to verify that the presence of the Row Level Security feature does not interfere with their use case.
|
||||
- [19168](https://github.com/apache/superset/pull/19168): Celery upgrade to 5.X resulted in breaking changes to its command line invocation. Please follow [these](https://docs.celeryq.dev/en/stable/whatsnew-5.2.html#step-1-adjust-your-command-line-invocation) instructions for adjustments. Also consider migrating you Celery config per [here](https://docs.celeryq.dev/en/stable/userguide/configuration.html#conf-old-settings-map).
|
||||
- [19142](https://github.com/apache/superset/pull/19142): The `VERSIONED_EXPORT` config key is now `True` by default.
|
||||
- [19113](https://github.com/apache/superset/pull/19113): The `ENABLE_JAVASCRIPT_CONTROLS` config key has moved from an app config to a feature flag. Any deployments who overrode this setting will now need to override the feature flag from here onward.
|
||||
@@ -145,7 +193,7 @@ assists people when migrating to a new version.
|
||||
### Other
|
||||
|
||||
- [22022](https://github.com/apache/superset/pull/22022): HTTP API endpoints `/superset/approve` and `/superset/request_access` have been deprecated and their HTTP methods were changed from GET to POST
|
||||
- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by Github. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
|
||||
- [21895](https://github.com/apache/superset/pull/21895): Markdown components had their security increased by adhering to the same sanitization process enforced by GitHub. This means that some HTML elements found in markdowns are not allowed anymore due to the security risks they impose. If you're deploying Superset in a trusted environment and wish to use some of the blocked elements, then you can use the HTML_SANITIZATION_SCHEMA_EXTENSIONS configuration to extend the default sanitization schema. There's also the option to disable HTML sanitization using the HTML_SANITIZATION configuration but we do not recommend this approach because of the security risks. Given the provided configurations, we don't view the improved sanitization as a breaking change but as a security patch.
|
||||
|
||||
## 1.5.2
|
||||
|
||||
@@ -237,7 +285,7 @@ assists people when migrating to a new version.
|
||||
### Other
|
||||
|
||||
- [13772](https://github.com/apache/superset/pull/13772): Row level security (RLS) is now enabled by default. To activate the feature, please run `superset init` to expose the RLS menus to Admin users.
|
||||
- [13980](https://github.com/apache/superset/pull/13980): Data health checks no longer use the metadata database as an interim cache. Though non-breaking, deployments which implement complex logic should likely memoize the callback function. Refer to documentation in the confg.py file for more detail.
|
||||
- [13980](https://github.com/apache/superset/pull/13980): Data health checks no longer use the metadata database as an interim cache. Though non-breaking, deployments which implement complex logic should likely memoize the callback function. Refer to documentation in the config.py file for more detail.
|
||||
- [14255](https://github.com/apache/superset/pull/14255): The default `CSV_TO_HIVE_UPLOAD_DIRECTORY_FUNC` callable logic has been updated to leverage the specified database and schema to ensure the upload S3 key prefix is unique. Previously tables generated via upload from CSV with the same name but differ schema and/or cluster would use the same S3 key prefix. Note this change does not impact previously imported tables.
|
||||
|
||||
## 1.1.0
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
|
||||
x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
|
||||
x-superset-depends-on: &superset-depends-on
|
||||
- db
|
||||
- redis
|
||||
x-superset-volumes: &superset-volumes
|
||||
# /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
|
||||
x-superset-volumes:
|
||||
&superset-volumes # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
|
||||
- ./docker:/app/docker
|
||||
- superset_home:/app/superset_home
|
||||
|
||||
@@ -34,11 +34,12 @@ services:
|
||||
|
||||
db:
|
||||
env_file: docker/.env-non-dev
|
||||
image: postgres:14
|
||||
image: postgres:15
|
||||
container_name: superset_db
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- db_home:/var/lib/postgresql/data
|
||||
- ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
|
||||
|
||||
superset:
|
||||
env_file: docker/.env-non-dev
|
||||
@@ -73,7 +74,11 @@ services:
|
||||
user: "root"
|
||||
volumes: *superset-volumes
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "celery -A superset.tasks.celery_app:app inspect ping -d celery@$$HOSTNAME"]
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"celery -A superset.tasks.celery_app:app inspect ping -d celery@$$HOSTNAME",
|
||||
]
|
||||
|
||||
superset-worker-beat:
|
||||
image: *superset-image
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
|
||||
x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
|
||||
x-superset-user: &superset-user root
|
||||
x-superset-depends-on: &superset-depends-on
|
||||
- db
|
||||
@@ -29,6 +29,16 @@ x-superset-volumes: &superset-volumes
|
||||
|
||||
version: "3.7"
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:latest
|
||||
container_name: superset_nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
volumes:
|
||||
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
redis:
|
||||
image: redis:7
|
||||
container_name: superset_cache
|
||||
@@ -40,13 +50,14 @@ services:
|
||||
|
||||
db:
|
||||
env_file: docker/.env
|
||||
image: postgres:14
|
||||
image: postgres:15
|
||||
container_name: superset_db
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "127.0.0.1:5432:5432"
|
||||
volumes:
|
||||
- db_home:/var/lib/postgresql/data
|
||||
- ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
|
||||
|
||||
superset:
|
||||
env_file: docker/.env
|
||||
@@ -56,6 +67,8 @@ services:
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8088:8088
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
user: *superset-user
|
||||
depends_on: *superset-depends-on
|
||||
volumes: *superset-volumes
|
||||
@@ -68,6 +81,8 @@ services:
|
||||
image: superset-websocket
|
||||
ports:
|
||||
- 8080:8080
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
depends_on:
|
||||
- redis
|
||||
# Mount everything in superset-websocket into container and
|
||||
@@ -75,7 +90,7 @@ services:
|
||||
# This is necessary because host and container need to have
|
||||
# their own, separate versions of these files. .dockerignore
|
||||
# does not seem to work when starting the service through
|
||||
# docker-compose.
|
||||
# docker compose.
|
||||
#
|
||||
# For example, node_modules may contain libs with native bindings.
|
||||
# Those bindings need to be compiled for each OS and the container
|
||||
@@ -109,6 +124,8 @@ services:
|
||||
command: ["/app/docker/docker-frontend.sh"]
|
||||
env_file: docker/.env
|
||||
depends_on: *superset-depends-on
|
||||
environment:
|
||||
SCARF_ANALYTICS: "${SCARF_ANALYTICS}"
|
||||
volumes: *superset-volumes
|
||||
|
||||
superset-worker:
|
||||
@@ -120,6 +137,8 @@ services:
|
||||
depends_on: *superset-depends-on
|
||||
user: *superset-user
|
||||
volumes: *superset-volumes
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "celery -A superset.tasks.celery_app:app inspect ping -d celery@$$HOSTNAME"]
|
||||
# Bump memory limit if processing selenium / thumbnails on superset-worker
|
||||
|
||||
@@ -22,6 +22,12 @@ DATABASE_HOST=db
|
||||
DATABASE_PASSWORD=superset
|
||||
DATABASE_USER=superset
|
||||
|
||||
EXAMPLES_DB=examples
|
||||
EXAMPLES_HOST=db
|
||||
EXAMPLES_USER=examples
|
||||
EXAMPLES_PASSWORD=examples
|
||||
EXAMPLES_PORT=5432
|
||||
|
||||
# database engine specific environment variables
|
||||
# change the below if you prefer another database engine
|
||||
DATABASE_PORT=5432
|
||||
|
||||
@@ -21,11 +21,17 @@ DATABASE_DB=superset
|
||||
DATABASE_HOST=db
|
||||
DATABASE_PASSWORD=superset
|
||||
DATABASE_USER=superset
|
||||
DATABASE_PORT=5432
|
||||
DATABASE_DIALECT=postgresql
|
||||
|
||||
EXAMPLES_DB=examples
|
||||
EXAMPLES_HOST=db
|
||||
EXAMPLES_USER=examples
|
||||
EXAMPLES_PASSWORD=examples
|
||||
EXAMPLES_PORT=5432
|
||||
|
||||
# database engine specific environment variables
|
||||
# change the below if you prefer another database engine
|
||||
DATABASE_PORT=5432
|
||||
DATABASE_DIALECT=postgresql
|
||||
POSTGRES_DB=superset
|
||||
POSTGRES_USER=superset
|
||||
POSTGRES_PASSWORD=superset
|
||||
|
||||
@@ -46,9 +46,9 @@ Steps:
|
||||
|
||||
1. Create `./docker/requirements-local.txt`
|
||||
2. Add your new packages
|
||||
3. Rebuild docker-compose
|
||||
1. `docker-compose down -v`
|
||||
2. `docker-compose up`
|
||||
3. Rebuild docker compose
|
||||
1. `docker compose down -v`
|
||||
2. `docker compose up`
|
||||
|
||||
## Initializing Database
|
||||
|
||||
@@ -56,7 +56,7 @@ The database will initialize itself upon startup via the init container ([`super
|
||||
|
||||
## Normal Operation
|
||||
|
||||
To run the container, simply run: `docker-compose up`
|
||||
To run the container, simply run: `docker compose up`
|
||||
|
||||
After waiting several minutes for Superset initialization to finish, you can open a browser and view [`http://localhost:8088`](http://localhost:8088)
|
||||
to start your journey.
|
||||
|
||||
@@ -35,6 +35,14 @@ else
|
||||
echo "Skipping local overrides"
|
||||
fi
|
||||
|
||||
#
|
||||
# playwright is an optional package - run only if it is installed
|
||||
#
|
||||
if command -v playwright > /dev/null 2>&1; then
|
||||
playwright install-deps
|
||||
playwright install chromium
|
||||
fi
|
||||
|
||||
case "${1}" in
|
||||
worker)
|
||||
echo "Starting Celery worker..."
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# ------------------------------------------------------------------------
|
||||
# Creates the examples database and respective user. This database location
|
||||
# and access credentials are defined on the environment variables
|
||||
# ------------------------------------------------------------------------
|
||||
set -e
|
||||
|
||||
psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" <<-EOSQL
|
||||
CREATE USER ${EXAMPLES_USER} WITH PASSWORD '${EXAMPLES_PASSWORD}';
|
||||
CREATE DATABASE ${EXAMPLES_DB};
|
||||
GRANT ALL PRIVILEGES ON DATABASE ${EXAMPLES_DB} TO ${EXAMPLES_USER};
|
||||
EOSQL
|
||||
|
||||
psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" -d "${EXAMPLES_DB}" <<-EOSQL
|
||||
GRANT ALL ON SCHEMA public TO ${EXAMPLES_USER};
|
||||
EOSQL
|
||||
@@ -0,0 +1,127 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
user nginx;
|
||||
worker_processes 1;
|
||||
|
||||
error_log /var/log/nginx/error.log warn;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
|
||||
http {
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent [$connection_requests] "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
|
||||
sendfile on;
|
||||
#tcp_nopush on;
|
||||
|
||||
keepalive_timeout 30;
|
||||
keepalive_requests 2;
|
||||
|
||||
###### Compression Stuff
|
||||
|
||||
# Enable Gzip compressed.
|
||||
gzip on;
|
||||
|
||||
# Compression level (1-9).
|
||||
# 5 is a perfect compromise between size and cpu usage, offering about
|
||||
# 75% reduction for most ascii files (almost identical to level 9).
|
||||
gzip_comp_level 5;
|
||||
|
||||
# Don't compress anything that's already small and unlikely to shrink much
|
||||
# if at all (the default is 20 bytes, which is bad as that usually leads to
|
||||
# larger files after gzipping).
|
||||
gzip_min_length 256;
|
||||
|
||||
# Compress data even for clients that are connecting to us via proxies,
|
||||
# identified by the "Via" header (required for CloudFront).
|
||||
gzip_proxied any;
|
||||
|
||||
# Tell proxies to cache both the gzipped and regular version of a resource
|
||||
# whenever the client's Accept-Encoding capabilities header varies;
|
||||
# Avoids the issue where a non-gzip capable client (which is extremely rare
|
||||
# today) would display gibberish if their proxy gave them the gzipped version.
|
||||
gzip_vary on;
|
||||
|
||||
# Compress all output labeled with one of the following MIME-types.
|
||||
gzip_types
|
||||
application/atom+xml
|
||||
application/javascript
|
||||
application/json
|
||||
application/rss+xml
|
||||
application/vnd.ms-fontobject
|
||||
application/x-font-ttf
|
||||
application/x-web-app-manifest+json
|
||||
application/xhtml+xml
|
||||
application/xml
|
||||
font/opentype
|
||||
image/svg+xml
|
||||
image/x-icon
|
||||
text/css
|
||||
text/plain
|
||||
text/x-component;
|
||||
# text/html is always compressed by HttpGzipModule
|
||||
|
||||
output_buffers 20 10m;
|
||||
|
||||
client_max_body_size 10m;
|
||||
|
||||
upstream superset_app {
|
||||
server host.docker.internal:8088;
|
||||
keepalive 100;
|
||||
}
|
||||
|
||||
upstream superset_websocket {
|
||||
server host.docker.internal:8080;
|
||||
keepalive 100;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80 default_server;
|
||||
server_name _;
|
||||
|
||||
location /ws {
|
||||
proxy_pass http://superset_websocket;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://superset_app;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_http_version 1.1;
|
||||
port_in_redirect off;
|
||||
proxy_connect_timeout 300;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,49 +22,42 @@
|
||||
#
|
||||
import logging
|
||||
import os
|
||||
from typing import Optional
|
||||
|
||||
from cachelib.file import FileSystemCache
|
||||
from celery.schedules import crontab
|
||||
from flask_caching.backends.filesystemcache import FileSystemCache
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
DATABASE_DIALECT = os.getenv("DATABASE_DIALECT")
|
||||
DATABASE_USER = os.getenv("DATABASE_USER")
|
||||
DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD")
|
||||
DATABASE_HOST = os.getenv("DATABASE_HOST")
|
||||
DATABASE_PORT = os.getenv("DATABASE_PORT")
|
||||
DATABASE_DB = os.getenv("DATABASE_DB")
|
||||
|
||||
def get_env_variable(var_name: str, default: Optional[str] = None) -> str:
|
||||
"""Get the environment variable or raise exception."""
|
||||
try:
|
||||
return os.environ[var_name]
|
||||
except KeyError:
|
||||
if default is not None:
|
||||
return default
|
||||
else:
|
||||
error_msg = "The environment variable {} was missing, abort...".format(
|
||||
var_name
|
||||
)
|
||||
raise OSError(error_msg)
|
||||
|
||||
|
||||
DATABASE_DIALECT = get_env_variable("DATABASE_DIALECT")
|
||||
DATABASE_USER = get_env_variable("DATABASE_USER")
|
||||
DATABASE_PASSWORD = get_env_variable("DATABASE_PASSWORD")
|
||||
DATABASE_HOST = get_env_variable("DATABASE_HOST")
|
||||
DATABASE_PORT = get_env_variable("DATABASE_PORT")
|
||||
DATABASE_DB = get_env_variable("DATABASE_DB")
|
||||
EXAMPLES_USER = os.getenv("EXAMPLES_USER")
|
||||
EXAMPLES_PASSWORD = os.getenv("EXAMPLES_PASSWORD")
|
||||
EXAMPLES_HOST = os.getenv("EXAMPLES_HOST")
|
||||
EXAMPLES_PORT = os.getenv("EXAMPLES_PORT")
|
||||
EXAMPLES_DB = os.getenv("EXAMPLES_DB")
|
||||
|
||||
# The SQLAlchemy connection string.
|
||||
SQLALCHEMY_DATABASE_URI = "{}://{}:{}@{}:{}/{}".format(
|
||||
DATABASE_DIALECT,
|
||||
DATABASE_USER,
|
||||
DATABASE_PASSWORD,
|
||||
DATABASE_HOST,
|
||||
DATABASE_PORT,
|
||||
DATABASE_DB,
|
||||
SQLALCHEMY_DATABASE_URI = (
|
||||
f"{DATABASE_DIALECT}://"
|
||||
f"{DATABASE_USER}:{DATABASE_PASSWORD}@"
|
||||
f"{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_DB}"
|
||||
)
|
||||
|
||||
REDIS_HOST = get_env_variable("REDIS_HOST")
|
||||
REDIS_PORT = get_env_variable("REDIS_PORT")
|
||||
REDIS_CELERY_DB = get_env_variable("REDIS_CELERY_DB", "0")
|
||||
REDIS_RESULTS_DB = get_env_variable("REDIS_RESULTS_DB", "1")
|
||||
SQLALCHEMY_EXAMPLES_URI = (
|
||||
f"{DATABASE_DIALECT}://"
|
||||
f"{EXAMPLES_USER}:{EXAMPLES_PASSWORD}@"
|
||||
f"{EXAMPLES_HOST}:{EXAMPLES_PORT}/{EXAMPLES_DB}"
|
||||
)
|
||||
|
||||
REDIS_HOST = os.getenv("REDIS_HOST", "redis")
|
||||
REDIS_PORT = os.getenv("REDIS_PORT", "6379")
|
||||
REDIS_CELERY_DB = os.getenv("REDIS_CELERY_DB", "0")
|
||||
REDIS_RESULTS_DB = os.getenv("REDIS_RESULTS_DB", "1")
|
||||
|
||||
RESULTS_BACKEND = FileSystemCache("/app/superset_home/sqllab")
|
||||
|
||||
|
||||
@@ -4,10 +4,11 @@ ARG DOCKERIZE_VERSION=v0.7.0
|
||||
|
||||
RUN apk update --no-cache \
|
||||
&& apk add --no-cache wget openssl \
|
||||
&& wget -O - https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz | tar xzf - -C /usr/local/bin \
|
||||
&& case "$(apk --print-arch)" in \
|
||||
x86_64) ARCH=amd64 ;; \
|
||||
aarch64) ARCH=arm64 ;; \
|
||||
esac \
|
||||
&& wget -O - https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-${ARCH}-${DOCKERIZE_VERSION}.tar.gz | tar xzf - -C /usr/local/bin \
|
||||
&& apk del wget
|
||||
|
||||
USER 10001
|
||||
|
||||
ENTRYPOINT ["dockerize"]
|
||||
CMD ["--help"]
|
||||
|
||||
@@ -18,3 +18,5 @@
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
docs/.zshrc
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: API
|
||||
hide_title: true
|
||||
sidebar_position: 9
|
||||
sidebar_position: 10
|
||||
---
|
||||
|
||||
import { Buffer } from 'buffer';
|
||||
@@ -15,7 +15,7 @@ import { Alert } from 'antd';
|
||||
|
||||
Superset's public **REST API** follows the
|
||||
[OpenAPI specification](https://swagger.io/specification/), and is
|
||||
documented here. The docs bellow are generated using
|
||||
documented here. The docs below are generated using
|
||||
[Swagger React UI](https://www.npmjs.com/package/swagger-ui-react).
|
||||
|
||||
<Alert
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"label": "Contributing",
|
||||
"position": 6
|
||||
"position": 7
|
||||
}
|
||||
|
||||
@@ -13,8 +13,12 @@ which can be joined by anyone):
|
||||
|
||||
- [Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org)
|
||||
- [Apache Superset Slack community](http://bit.ly/join-superset-slack)
|
||||
- [GitHub issues and PR's](https://github.com/apache/superset/issues)
|
||||
- [GitHub issues](https://github.com/apache/superset/issues)
|
||||
- [GitHub pull requests](https://github.com/apache/superset/pulls)
|
||||
- [GitHub discussions](https://github.com/apache/superset/discussions)
|
||||
- [Superset Community Calendar](https://superset.apache.org/community)
|
||||
|
||||
More references:
|
||||
- [Comprehensive Tutorial for Contributing Code to Apache Superset](https://preset.io/blog/tutorial-contributing-code-to-apache-superset/)
|
||||
- [CONTRIBUTING Guide on GitHub](https://github.com/apache/superset/blob/master/CONTRIBUTING.md)
|
||||
- [Superset Wiki (code guidelines and additional resources)](https://github.com/apache/superset/wiki)
|
||||
|
||||
@@ -15,6 +15,8 @@ The Superset project is always happy to review proposals for new high quality vi
|
||||
plugins. However, for highly custom viz types it is recommended to maintain a fork
|
||||
of Superset, and add the custom built viz plugins by hand.
|
||||
|
||||
**Note:** Additional community-generated resources about creating and deploying custom visualization plugins can be found on the [Superset Wiki](https://github.com/apache/superset/wiki/Community-Resource-Library#creating-custom-data-visualizations)
|
||||
|
||||
### Prerequisites
|
||||
|
||||
In order to create a new viz plugin, you need the following:
|
||||
|
||||
@@ -39,7 +39,7 @@ We use [Pylint](https://pylint.org/) for linting which can be invoked via:
|
||||
tox -e pylint
|
||||
```
|
||||
|
||||
In terms of best practices please avoid blanket disablement of Pylint messages globally (via `.pylintrc`) or top-level within the file header, albeit there being a few exceptions. Disablement should occur inline as it prevents masking issues and provides context as to why said message is disabled.
|
||||
In terms of best practices please avoid blanket disabling of Pylint messages globally (via `.pylintrc`) or top-level within the file header, albeit there being a few exceptions. Disabling should occur inline as it prevents masking issues and provides context as to why said message is disabled.
|
||||
|
||||
Additionally, the Python code is auto-formatted using [Black](https://github.com/python/black) which
|
||||
is configured as a pre-commit hook. There are also numerous [editor integrations](https://black.readthedocs.io/en/stable/integrations/editors.html)
|
||||
|
||||
@@ -9,7 +9,7 @@ version: 1
|
||||
|
||||
#### 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](/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.9 or 3.10, then proceed with:
|
||||
|
||||
@@ -126,17 +126,17 @@ CYPRESS_BASE_URL=<your url> npm run cypress open
|
||||
|
||||
See [`superset-frontend/cypress_build.sh`](https://github.com/apache/superset/blob/master/superset-frontend/cypress_build.sh).
|
||||
|
||||
As an alternative you can use docker-compose environment for testing:
|
||||
As an alternative you can use docker compose environment for testing:
|
||||
|
||||
Make sure you have added below line to your /etc/hosts file:
|
||||
`127.0.0.1 db`
|
||||
|
||||
If you already have launched Docker environment please use the following command to assure a fresh database instance:
|
||||
`docker-compose down -v`
|
||||
`docker compose down -v`
|
||||
|
||||
Launch environment:
|
||||
|
||||
`CYPRESS_CONFIG=true docker-compose up`
|
||||
`CYPRESS_CONFIG=true docker compose up`
|
||||
|
||||
It will serve backend and frontend on port 8088.
|
||||
|
||||
@@ -176,7 +176,7 @@ superset:
|
||||
Start Superset as usual
|
||||
|
||||
```bash
|
||||
docker-compose up
|
||||
docker compose up
|
||||
```
|
||||
|
||||
Install the required libraries and packages to the docker container
|
||||
|
||||
@@ -58,7 +58,7 @@ for your target language already exists in the `superset/translations` directory
|
||||
ls superset/translations | grep -E "^[a-z]{2}\/"
|
||||
```
|
||||
|
||||
If your language already has a pre-existing translation, skip to the next section
|
||||
If your language already has a preexisting translation, skip to the next section
|
||||
|
||||
The following languages are already supported by Flask AppBuilder, and will make it
|
||||
easier to translate the application to your target language:
|
||||
|
||||
@@ -19,7 +19,7 @@ The best way to report a bug is to file an issue on GitHub. Please include:
|
||||
When posting Python stack traces, please quote them using
|
||||
[Markdown blocks](https://help.github.com/articles/creating-and-highlighting-code-blocks/).
|
||||
|
||||
_Please note that feature requests opened as Github Issues will be moved to Discussions._
|
||||
_Please note that feature requests opened as GitHub Issues will be moved to Discussions._
|
||||
|
||||
### Submit Ideas or Feature Requests
|
||||
|
||||
@@ -51,7 +51,7 @@ articles. See [Documentation](#documentation) for more details.
|
||||
### Add Translations
|
||||
|
||||
If you are proficient in a non-English language, you can help translate
|
||||
text strings from Superset's UI. You can jump in to the existing
|
||||
text strings from Superset's UI. You can jump into the existing
|
||||
language dictionaries at
|
||||
`superset/translations/<language_code>/LC_MESSAGES/messages.po`, or
|
||||
even create a dictionary for a new language altogether.
|
||||
|
||||
@@ -40,7 +40,7 @@ Then select your database type in the resulting modal:
|
||||
<img src={useBaseUrl("/img/tutorial/tutorial_02_select_database.png" )} width="600" />{" "} <br/><br/>
|
||||
|
||||
Once you've selected a database, you can configure a number of advanced options in this window,
|
||||
or for the purposes of this this walkthrough, you can click the link below all these fields:
|
||||
or for the purposes of this walkthrough, you can click the link below all these fields:
|
||||
|
||||
<img src={useBaseUrl("/img/tutorial/tutorial_03a_database_connection_string_link.png" )} width="600" />{" "} <br/><br/>
|
||||
|
||||
@@ -185,7 +185,7 @@ Access to dashboards is managed via owners (users that have edit permissions to
|
||||
Non-owner users access can be managed two different ways:
|
||||
|
||||
1. Dataset permissions - if you add to the relevant role permissions to datasets it automatically grants implicit access to all dashboards that uses those permitted datasets
|
||||
2. Dashboard roles - if you enable **DASHBOARD_RBAC** [feature flag](https://superset.apache.org/docs/installation/configuring-superset#feature-flags) then you be able to manage which roles can access the dashboard
|
||||
2. Dashboard roles - if you enable **DASHBOARD_RBAC** [feature flag](/docs/installation/configuring-superset#feature-flags) then you be able to manage which roles can access the dashboard
|
||||
- Granting a role access to a dashboard will bypass dataset level checks. Having dashboard access implicitly grants read access to all the featured charts in the dashboard, and thereby also all the associated datasets.
|
||||
- If no roles are specified for a dashboard, regular **Dataset permissions** will apply.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"label": "Connecting to Databases",
|
||||
"position": 3
|
||||
"position": 5
|
||||
}
|
||||
|
||||
@@ -26,17 +26,14 @@ s3://... -> s3%3A//...
|
||||
|
||||
### PyAthena
|
||||
|
||||
You can also use [PyAthena library](https://pypi.org/project/PyAthena/) (no Java required) with the
|
||||
You can also use the [PyAthena library](https://pypi.org/project/PyAthena/) (no Java required) with the
|
||||
following connection string:
|
||||
|
||||
```
|
||||
awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
|
||||
```
|
||||
|
||||
The PyAthena library also allows to assume a specific IAM role, by [importing the datasource from YAML](https://superset.apache.org/docs/miscellaneous/importing-exporting-datasources/#importing-datasources-from-yaml) and passing extra parameters:
|
||||
The PyAthena library also allows to assume a specific IAM role which you can define by adding following parameters in Superset's Athena database connection UI under ADVANCED --> Other --> ENGINE PARAMETERS.
|
||||
```
|
||||
databases:
|
||||
- database_name: awsathena
|
||||
sqlalchemy_uri: awsathena+rest://athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
|
||||
extra: "{\"engine_params\": {\"connect_args\": {\"role_arn\": \"{{ ROLE_ARN }}\" }}}"
|
||||
{"connect_args":{"role_arn":"<role arn>"}}
|
||||
```
|
||||
|
||||
@@ -13,7 +13,7 @@ The recommended connector library for BigQuery is
|
||||
### Install BigQuery Driver
|
||||
|
||||
Follow the steps [here](/docs/databases/docker-add-drivers) about how to
|
||||
install new database drivers when setting up Superset locally via docker-compose.
|
||||
install new database drivers when setting up Superset locally via docker compose.
|
||||
|
||||
```
|
||||
echo "sqlalchemy-bigquery" >> ./docker/requirements-local.txt
|
||||
@@ -87,3 +87,6 @@ You should then be able to connect to your BigQuery datasets.
|
||||
|
||||
To be able to upload CSV or Excel files to BigQuery in Superset, you'll need to also add the
|
||||
[pandas_gbq](https://github.com/pydata/pandas-gbq) library.
|
||||
|
||||
Currently, Google BigQuery python sdk is not compatible with `gevent`, due to some dynamic monkeypatching on python core library by `gevent`.
|
||||
So, when you deploy Superset with `gunicorn` server, you have to use worker type except `gevent`.
|
||||
|
||||
@@ -10,13 +10,13 @@ version: 1
|
||||
To use ClickHouse with Superset, you will need to add the following Python library:
|
||||
|
||||
```
|
||||
clickhouse-connect>=0.4.1
|
||||
clickhouse-connect>=0.6.8
|
||||
```
|
||||
|
||||
If running Superset using Docker Compose, add the following to your `./docker/requirements-local.txt` file:
|
||||
|
||||
```
|
||||
clickhouse-connect>=0.4.1
|
||||
clickhouse-connect>=0.6.8
|
||||
```
|
||||
|
||||
The recommended connector library for ClickHouse is
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: Databend
|
||||
hide_title: true
|
||||
sidebar_position: 39
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Databend
|
||||
|
||||
The recommended connector library for Databend is [databend-sqlalchemy](https://pypi.org/project/databend-sqlalchemy/).
|
||||
Superset has been tested on `databend-sqlalchemy>=0.2.3`.
|
||||
|
||||
The recommended connection string is:
|
||||
|
||||
```
|
||||
databend://{username}:{password}@{host}:{port}/{database_name}
|
||||
```
|
||||
|
||||
Here's a connection string example of Superset connecting to a Databend database:
|
||||
|
||||
```
|
||||
databend://user:password@localhost:8000/default?secure=false
|
||||
```
|
||||
@@ -28,7 +28,7 @@ We added a new configuration option where the admin can define their preferred d
|
||||
# displayed prominently in the "Add Database" dialog. You should
|
||||
# use the "engine_name" attribute of the corresponding DB engine spec
|
||||
# in `superset/db_engine_specs/`.
|
||||
PREFERRED_DATABASES: List[str] = [
|
||||
PREFERRED_DATABASES: list[str] = [
|
||||
"PostgreSQL",
|
||||
"Presto",
|
||||
"MySQL",
|
||||
|
||||
@@ -7,87 +7,57 @@ version: 1
|
||||
|
||||
## Adding New Database Drivers in Docker
|
||||
|
||||
Superset requires a Python database driver to be installed for each additional type of database you
|
||||
want to connect to. When setting up Superset locally via `docker-compose`, the drivers and packages
|
||||
contained in
|
||||
[requirements.txt](https://github.com/apache/superset/blob/master/requirements.txt) and
|
||||
[requirements-dev.txt](https://github.com/apache/superset/blob/master/requirements-dev.txt)
|
||||
will be installed automatically.
|
||||
Superset requires a Python database driver to be installed for each additional type of database you want to connect to.
|
||||
|
||||
In this section, we'll walk through how to install the MySQL connector library. The connector
|
||||
library installation process is the same for all additional libraries and we'll end this section
|
||||
with the recommended connector library for each database.
|
||||
In this example, we'll walk through how to install the MySQL connector library. The connector library installation process is the same for all additional libraries.
|
||||
|
||||
### 1. Determine the driver you need
|
||||
|
||||
To figure out how to install the [database driver](/docs/databases/installing-database-drivers) of your choice.
|
||||
Consult the [list of database drivers](/docs/databases/installing-database-drivers) and find the PyPI package needed to connect to your database. In this example, we're connecting to a MySQL database, so we'll need the `mysqlclient` connector library.
|
||||
|
||||
In the example, we'll walk through the process of installing a MySQL driver in Superset.
|
||||
### 2. Install the driver in the container
|
||||
|
||||
### 2. Install MySQL Driver
|
||||
We need to get the `mysqlclient` library installed into the Superset docker container (it doesn't matter if it's installed on the host machine). We could enter the running container with `docker exec -it <container_name> bash` and run `pip install mysqlclient` there, but that wouldn't persist permanently.
|
||||
|
||||
As we are currently running inside of a Docker container via `docker compose`, we cannot simply run
|
||||
`pip install mysqlclient` on our local shell and expect the drivers to be installed within the
|
||||
Docker containers for superset.
|
||||
To address this, the Superset `docker compose` deployment uses the convention of a `requirements-local.txt` file. All packages listed in this file will be installed into the container from PyPI at runtime. This file will be ignored by Git for the purposes of local development.
|
||||
|
||||
In order to address this, the Superset `docker compose` setup comes with a mechanism for you to
|
||||
install packages locally, which will be ignored by Git for the purposes of local development. Please
|
||||
follow these steps:
|
||||
|
||||
Create `requirements-local.txt`
|
||||
Create the file `requirements-local.txt` in a subdirectory called `docker` that exists in the directory with your `docker-compose.yml` or `docker-compose-non-dev.yml` file.
|
||||
|
||||
```
|
||||
# From the repo root...
|
||||
# Run from the repo root:
|
||||
touch ./docker/requirements-local.txt
|
||||
```
|
||||
|
||||
Add the driver selected in step above:
|
||||
Add the driver identified in step above. You can use a text editor or do it from the command line like:
|
||||
|
||||
```
|
||||
echo "mysqlclient" >> ./docker/requirements-local.txt
|
||||
```
|
||||
|
||||
Rebuild your local image with the new driver baked in:
|
||||
**If you are running a stock (non-customized) Superset image**, you are done. Launch Superset with `docker compose -f docker-compose-non-dev.yml up` and the driver should be present.
|
||||
|
||||
You can check its presence by entering the running container with `docker exec -it <container_name> bash` and running `pip freeze`. The PyPI package should be present in the printed list.
|
||||
|
||||
**If you're running a customized docker image**, rebuild your local image with the new driver baked in:
|
||||
|
||||
```
|
||||
docker-compose build --force-rm
|
||||
docker compose build --force-rm
|
||||
```
|
||||
|
||||
After the rebuild of the Docker images is complete (which may take a few minutes) you can relaunch using the following command:
|
||||
|
||||
```
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
The other option is to start Superset via Docker Compose is using the recipe in `docker-compose-non-dev.yml`, which will use pre-built frontend assets and skip the building of front-end assets:
|
||||
|
||||
```
|
||||
docker-compose -f docker-compose-non-dev.yml pull
|
||||
docker-compose -f docker-compose-non-dev.yml up
|
||||
```
|
||||
After the rebuild of the Docker images is complete, relaunch Superset by running `docker compose up`.
|
||||
|
||||
### 3. Connect to MySQL
|
||||
|
||||
Now that you've got a MySQL driver installed locally, you should be able to test it out.
|
||||
Now that you've got a MySQL driver installed in your container, you should be able to connect to your database via the Superset web UI.
|
||||
|
||||
We can now create a Datasource in Superset that can be used to connect to a MySQL instance. Assuming
|
||||
your MySQL instance is running locally and can be accessed via localhost, use the following
|
||||
connection string in “SQL Alchemy URI”, by going to Sources > Databases > + icon (to add a new
|
||||
datasource) in Superset.
|
||||
As an admin user, go to Settings -> Data: Database Connections and click the +DATABASE button. From there, follow the steps on the [Using Database Connection UI page](/docs/databases/db-connection-ui).
|
||||
|
||||
For Docker running in Linux:
|
||||
Consult the page for your specific database type in the Superset documentation to determine the connection string and any other parameters you need to input. For instance, on the [MySQL page](/docs/databases/mysql), we see that the connection string to a local MySQL database differs depending on whether the setup is running on Linux or Mac.
|
||||
|
||||
```
|
||||
mysql://mysqluser:mysqluserpassword@localhost/example?charset=utf8
|
||||
```
|
||||
Click the “Test Connection” button, which should result in a popup message saying, "Connection looks good!".
|
||||
|
||||
For Docker running in OSX:
|
||||
### 4. Troubleshooting
|
||||
|
||||
```
|
||||
mysql://mysqluser:mysqluserpassword@docker.for.mac.host.internal/example?charset=utf8
|
||||
```
|
||||
If the test fails, review your docker logs for error messages. Superset uses SQLAlchemy to connect to databases; to troubleshoot the connection string for your database, you might start Python in the Superset application container or host environment and try to connect directly to the desired database and fetch data. This eliminates Superset for the purposes of isolating the problem.
|
||||
|
||||
Then click “Test Connection”, which should give you an “OK” message. If not, please look at your
|
||||
terminal for error messages, and reach out for help.
|
||||
|
||||
You can repeat this process for every database you want superset to be able to connect to.
|
||||
Repeat this process for each different type of database you want Superset to be able to connect to.
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
title: Apache Doris
|
||||
hide_title: true
|
||||
sidebar_position: 5
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Doris
|
||||
|
||||
The [sqlalchemy-doris](https://pypi.org/project/pydoris/) library is the recommended way to connect to Apache Doris through SQLAlchemy.
|
||||
|
||||
You'll need the following setting values to form the connection string:
|
||||
|
||||
- **User**: User Name
|
||||
- **Password**: Password
|
||||
- **Host**: Doris FE Host
|
||||
- **Port**: Doris FE port
|
||||
- **Catalog**: Catalog Name
|
||||
- **Database**: Database Name
|
||||
|
||||
|
||||
Here's what the connection string looks like:
|
||||
|
||||
```
|
||||
doris://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>
|
||||
```
|
||||
@@ -10,7 +10,7 @@ import useBaseUrl from "@docusaurus/useBaseUrl";
|
||||
## Apache Druid
|
||||
|
||||
A native connector to Druid ships with Superset (behind the `DRUID_IS_ACTIVE` flag) but this is
|
||||
slowly getting deprecated in favor of SQLAlchemy / DBAPI connector made available in the
|
||||
slowly getting deprecated in favor of the SQLAlchemy / DBAPI connector made available in the
|
||||
[pydruid library](https://pythonhosted.org/pydruid/).
|
||||
|
||||
The connection string looks like:
|
||||
@@ -20,10 +20,10 @@ druid://<User>:<password>@<Host>:<Port-default-9088>/druid/v2/sql
|
||||
```
|
||||
Here's a breakdown of the key components of this connection string:
|
||||
|
||||
User: username portion of the credentials needed to connect to your database
|
||||
Password: password portion of the credentials needed to connect to your database
|
||||
Host: IP address (or URL) of the host machine that's running your database
|
||||
Port: specific port that's exposed on your host machine where your database is running
|
||||
- `User`: username portion of the credentials needed to connect to your database
|
||||
- `Password`: password portion of the credentials needed to connect to your database
|
||||
- `Host`: IP address (or URL) of the host machine that's running your database
|
||||
- `Port`: specific port that's exposed on your host machine where your database is running
|
||||
|
||||
### Customizing Druid Connection
|
||||
|
||||
|
||||
@@ -45,9 +45,9 @@ A common pattern is to use environment variables to make secrets available.
|
||||
|
||||
```python
|
||||
def example_password_as_env_var(url):
|
||||
# assuming the uri looks like
|
||||
# mysql://localhost?superset_user:{SUPERSET_PASSWORD}
|
||||
return url.password.format(os.environ)
|
||||
# assuming the uri looks like
|
||||
# mysql://localhost?superset_user:{SUPERSET_PASSWORD}
|
||||
return url.password.format(**os.environ)
|
||||
|
||||
SQLALCHEMY_CUSTOM_PASSWORD_STORE = example_password_as_env_var
|
||||
```
|
||||
|
||||
@@ -22,46 +22,48 @@ as well as the packages needed to connect to the databases you want to access th
|
||||
|
||||
Some of the recommended packages are shown below. Please refer to [setup.py](https://github.com/apache/superset/blob/master/setup.py) for the versions that are compatible with Superset.
|
||||
|
||||
| Database | PyPI package | Connection String |
|
||||
| --------------------------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
||||
| [Amazon Athena](/docs/databases/athena) | `pip install pyathena[pandas]` , `pip install PyAthenaJDBC` | `awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{ ` |
|
||||
| [Amazon DynamoDB](/docs/databases/dynamodb) | `pip install pydynamodb` | `dynamodb://{access_key_id}:{secret_access_key}@dynamodb.{region_name}.amazonaws.com?connector=superset` |
|
||||
| [Amazon Redshift](/docs/databases/redshift) | `pip install sqlalchemy-redshift` | ` redshift+psycopg2://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>` |
|
||||
| [Apache Drill](/docs/databases/drill) | `pip install sqlalchemy-drill` | `drill+sadrill:// For JDBC drill+jdbc://` |
|
||||
| [Apache Druid](/docs/databases/druid) | `pip install pydruid` | `druid://<User>:<password>@<Host>:<Port-default-9088>/druid/v2/sql` |
|
||||
| [Apache Hive](/docs/databases/hive) | `pip install pyhive` | `hive://hive@{hostname}:{port}/{database}` |
|
||||
| [Apache Impala](/docs/databases/impala) | `pip install impyla` | `impala://{hostname}:{port}/{database}` |
|
||||
| [Apache Kylin](/docs/databases/kylin) | `pip install kylinpy` | `kylin://<username>:<password>@<hostname>:<port>/<project>?<param1>=<value1>&<param2>=<value2>` |
|
||||
| [Apache Pinot](/docs/databases/pinot) | `pip install pinotdb` | `pinot://BROKER:5436/query?server=http://CONTROLLER:5983/` |
|
||||
| [Apache Solr](/docs/databases/solr) | `pip install sqlalchemy-solr` | `solr://{username}:{password}@{hostname}:{port}/{server_path}/{collection}` |
|
||||
| [Apache Spark SQL](/docs/databases/spark-sql) | `pip install pyhive` | `hive://hive@{hostname}:{port}/{database}` |
|
||||
| [Ascend.io](/docs/databases/ascend) | `pip install impyla` | `ascend://{username}:{password}@{hostname}:{port}/{database}?auth_mechanism=PLAIN;use_ssl=true` |
|
||||
| [Azure MS SQL](/docs/databases/sql-server) | `pip install pymssql` | `mssql+pymssql://UserName@presetSQL:TestPassword@presetSQL.database.windows.net:1433/TestSchema` |
|
||||
| [Big Query](/docs/databases/bigquery) | `pip install sqlalchemy-bigquery` | `bigquery://{project_id}` |
|
||||
| [ClickHouse](/docs/databases/clickhouse) | `pip install clickhouse-connect` | `clickhousedb://{username}:{password}@{hostname}:{port}/{database}` |
|
||||
| [CockroachDB](/docs/databases/cockroachdb) | `pip install cockroachdb` | `cockroachdb://root@{hostname}:{port}/{database}?sslmode=disable` |
|
||||
| [Dremio](/docs/databases/dremio) | `pip install sqlalchemy_dremio` | `dremio://user:pwd@host:31010/` |
|
||||
| [Elasticsearch](/docs/databases/elasticsearch) | `pip install elasticsearch-dbapi` | `elasticsearch+http://{user}:{password}@{host}:9200/` |
|
||||
| [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}@{database} or firebolt://{username}:{password}@{database}/{engine_name}` |
|
||||
| [Hologres](/docs/databases/hologres) | `pip install psycopg2` | `postgresql+psycopg2://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [IBM Db2](/docs/databases/ibm-db2) | `pip install ibm_db_sa` | `db2+ibm_db://` |
|
||||
| [IBM Netezza Performance Server](/docs/databases/netezza) | `pip install nzalchemy` | `netezza+nzpy://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [MySQL](/docs/databases/mysql) | `pip install mysqlclient` | `mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [Oracle](/docs/databases/oracle) | `pip install cx_Oracle` | `oracle://` |
|
||||
| [PostgreSQL](/docs/databases/postgres) | `pip install psycopg2` | `postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [Trino](/docs/databases/trino) | `pip install trino` | `trino://{username}:{password}@{hostname}:{port}/{catalog}` |
|
||||
| [Presto](/docs/databases/presto) | `pip install pyhive` | `presto://` |
|
||||
| [SAP Hana](/docs/databases/hana) | `pip install hdbcli sqlalchemy-hana or pip install apache-superset[hana]` | `hana://{username}:{password}@{host}:{port}` |
|
||||
| [StarRocks](/docs/databases/starrocks) | `pip install starrocks` | `starrocks://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>` |
|
||||
| [Snowflake](/docs/databases/snowflake) | `pip install snowflake-sqlalchemy` | `snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}` |
|
||||
| SQLite | No additional library needed | `sqlite://` |
|
||||
| [SQL Server](/docs/databases/sql-server) | `pip install pymssql` | `mssql+pymssql://` |
|
||||
| [Teradata](/docs/databases/teradata) | `pip install teradatasqlalchemy` | `teradatasql://{user}:{password}@{host}` |
|
||||
| [TimescaleDB](/docs/databases/timescaledb) | `pip install psycopg2` | `postgresql://<UserName>:<DBPassword>@<Database Host>:<Port>/<Database Name>` |
|
||||
| [Vertica](/docs/databases/vertica) | `pip install sqlalchemy-vertica-python` | `vertica+vertica_python://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [YugabyteDB](/docs/databases/yugabytedb) | `pip install psycopg2` | `postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| Database | PyPI package | Connection String |
|
||||
| --------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| [Amazon Athena](/docs/databases/athena) | `pip install pyathena[pandas]` , `pip install PyAthenaJDBC` | `awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&... ` |
|
||||
| [Apache Doris](/docs/databases/doris) | `pip install pydoris` | `doris://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>` |
|
||||
| [Amazon DynamoDB](/docs/databases/dynamodb) | `pip install pydynamodb` | `dynamodb://{access_key_id}:{secret_access_key}@dynamodb.{region_name}.amazonaws.com?connector=superset` |
|
||||
| [Amazon Redshift](/docs/databases/redshift) | `pip install sqlalchemy-redshift` | ` redshift+psycopg2://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>` |
|
||||
| [Apache Drill](/docs/databases/drill) | `pip install sqlalchemy-drill` | `drill+sadrill:// For JDBC drill+jdbc://` |
|
||||
| [Apache Druid](/docs/databases/druid) | `pip install pydruid` | `druid://<User>:<password>@<Host>:<Port-default-9088>/druid/v2/sql` |
|
||||
| [Apache Hive](/docs/databases/hive) | `pip install pyhive` | `hive://hive@{hostname}:{port}/{database}` |
|
||||
| [Apache Impala](/docs/databases/impala) | `pip install impyla` | `impala://{hostname}:{port}/{database}` |
|
||||
| [Apache Kylin](/docs/databases/kylin) | `pip install kylinpy` | `kylin://<username>:<password>@<hostname>:<port>/<project>?<param1>=<value1>&<param2>=<value2>` |
|
||||
| [Apache Pinot](/docs/databases/pinot) | `pip install pinotdb` | `pinot://BROKER:5436/query?server=http://CONTROLLER:5983/` |
|
||||
| [Apache Solr](/docs/databases/solr) | `pip install sqlalchemy-solr` | `solr://{username}:{password}@{hostname}:{port}/{server_path}/{collection}` |
|
||||
| [Apache Spark SQL](/docs/databases/spark-sql) | `pip install pyhive` | `hive://hive@{hostname}:{port}/{database}` |
|
||||
| [Ascend.io](/docs/databases/ascend) | `pip install impyla` | `ascend://{username}:{password}@{hostname}:{port}/{database}?auth_mechanism=PLAIN;use_ssl=true` |
|
||||
| [Azure MS SQL](/docs/databases/sql-server) | `pip install pymssql` | `mssql+pymssql://UserName@presetSQL:TestPassword@presetSQL.database.windows.net:1433/TestSchema` |
|
||||
| [Big Query](/docs/databases/bigquery) | `pip install sqlalchemy-bigquery` | `bigquery://{project_id}` |
|
||||
| [ClickHouse](/docs/databases/clickhouse) | `pip install clickhouse-connect` | `clickhousedb://{username}:{password}@{hostname}:{port}/{database}` |
|
||||
| [CockroachDB](/docs/databases/cockroachdb) | `pip install cockroachdb` | `cockroachdb://root@{hostname}:{port}/{database}?sslmode=disable` |
|
||||
| [Dremio](/docs/databases/dremio) | `pip install sqlalchemy_dremio` | `dremio://user:pwd@host:31010/` |
|
||||
| [Elasticsearch](/docs/databases/elasticsearch) | `pip install elasticsearch-dbapi` | `elasticsearch+http://{user}:{password}@{host}:9200/` |
|
||||
| [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}@{database} or firebolt://{username}:{password}@{database}/{engine_name}` |
|
||||
| [Hologres](/docs/databases/hologres) | `pip install psycopg2` | `postgresql+psycopg2://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [IBM Db2](/docs/databases/ibm-db2) | `pip install ibm_db_sa` | `db2+ibm_db://` |
|
||||
| [IBM Netezza Performance Server](/docs/databases/netezza) | `pip install nzalchemy` | `netezza+nzpy://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [MySQL](/docs/databases/mysql) | `pip install mysqlclient` | `mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [Oracle](/docs/databases/oracle) | `pip install cx_Oracle` | `oracle://` |
|
||||
| [PostgreSQL](/docs/databases/postgres) | `pip install psycopg2` | `postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [Presto](/docs/databases/presto) | `pip install pyhive` | `presto://` |
|
||||
| [Rockset](/docs/databases/rockset) | `pip install rockset-sqlalchemy` | `rockset://<api_key>:@<api_server>` |
|
||||
| [SAP Hana](/docs/databases/hana) | `pip install hdbcli sqlalchemy-hana or pip install apache-superset[hana]` | `hana://{username}:{password}@{host}:{port}` |
|
||||
| [StarRocks](/docs/databases/starrocks) | `pip install starrocks` | `starrocks://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>` |
|
||||
| [Snowflake](/docs/databases/snowflake) | `pip install snowflake-sqlalchemy` | `snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}` |
|
||||
| SQLite | No additional library needed | `sqlite://path/to/file.db?check_same_thread=false` |
|
||||
| [SQL Server](/docs/databases/sql-server) | `pip install pymssql` | `mssql+pymssql://` |
|
||||
| [Teradata](/docs/databases/teradata) | `pip install teradatasqlalchemy` | `teradatasql://{user}:{password}@{host}` |
|
||||
| [TimescaleDB](/docs/databases/timescaledb) | `pip install psycopg2` | `postgresql://<UserName>:<DBPassword>@<Database Host>:<Port>/<Database Name>` |
|
||||
| [Trino](/docs/databases/trino) | `pip install trino` | `trino://{username}:{password}@{hostname}:{port}/{catalog}` |
|
||||
| [Vertica](/docs/databases/vertica) | `pip install sqlalchemy-vertica-python` | `vertica+vertica_python://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
| [YugabyteDB](/docs/databases/yugabytedb) | `pip install psycopg2` | `postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>` |
|
||||
---
|
||||
|
||||
Note that many other databases are supported, the main criteria being the existence of a functional
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Querying across databases
|
||||
hide_title: true
|
||||
sidebar_position: 42
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Querying across databases
|
||||
|
||||
Superset offers an experimental feature for querying across different databases. This is done via a special database called "Superset meta database" that uses the "superset://" SQLAlchemy URI. When using the database it's possible to query any table in any of the configured databases using the following syntax:
|
||||
|
||||
```sql
|
||||
SELECT * FROM "database name.[[catalog.].schema].table name";
|
||||
```
|
||||
|
||||
For example:
|
||||
|
||||
```sql
|
||||
SELECT * FROM "examples.birth_names";
|
||||
```
|
||||
|
||||
Spaces are allowed, but periods in the names must be replaced by `%2E`. Eg:
|
||||
|
||||
```sql
|
||||
SELECT * FROM "Superset meta database.examples%2Ebirth_names";
|
||||
```
|
||||
|
||||
The query above returns the same rows as `SELECT * FROM "examples.birth_names"`, and also shows that the meta database can query tables from any table — even itself!
|
||||
|
||||
## Considerations
|
||||
|
||||
Before enabling this feature, there are a few considerations that you should have in mind. First, the meta database enforces permissions on the queried tables, so users should only have access via the database to tables that they originally have access to. Nevertheless, the meta database is a new surface for potential attacks, and bugs could allow users to see data they should not.
|
||||
|
||||
Second, there are performance considerations. The meta database will push any filtering, sorting, and limiting to the underlying databases, but any aggregations and joins will happen in memory in the process running the query. Because of this, it's recommended to run the database in async mode, so queries are executed in Celery workers, instead of the web workers. Additionally, it's possible to specify a hard limit on how many rows are returned from the underlying databases.
|
||||
|
||||
## Enabling the meta database
|
||||
|
||||
To enable the Superset meta database, first you need to set the `ENABLE_SUPERSET_META_DB` feature flag to true. Then, add a new database of type "Superset meta database" with the SQLAlchemy URI "superset://".
|
||||
|
||||
If you enable DML in the meta database users will be able to run DML queries on underlying databases **as long as DML is also enabled in them**. This allows users to run queries that move data across databases.
|
||||
|
||||
Second, you might want to change the value of `SUPERSET_META_DB_LIMIT`. The default value is 1000, and defines how many are read from each database before any aggregations and joins are executed. You can also set this value `None` if you only have small tables.
|
||||
|
||||
Additionally, you might want to restrict the databases to with the meta database has access to. This can be done in the database configuration, under "Advanced" -> "Other" -> "ENGINE PARAMETERS" and adding:
|
||||
|
||||
```json
|
||||
{"allowed_dbs":["Google Sheets","examples"]}
|
||||
```
|
||||
@@ -17,7 +17,8 @@ mysql://{username}:{password}@{host}/{database}
|
||||
|
||||
Host:
|
||||
|
||||
- For Localhost or Docker running Linux: `localhost` or `127.0.0.1`
|
||||
- For Localhost: `localhost` or `127.0.0.1`
|
||||
- Docker running on Linux: `172.18.0.1`
|
||||
- For On Prem: IP address or Host name
|
||||
- For Docker running in OSX: `docker.for.mac.host.internal`
|
||||
Port: `3306` by default
|
||||
|
||||
@@ -14,3 +14,9 @@ The expected connection string is formatted as follows:
|
||||
```
|
||||
pinot+http://<pinot-broker-host>:<pinot-broker-port>/query?controller=http://<pinot-controller-host>:<pinot-controller-port>/``
|
||||
```
|
||||
|
||||
The expected connection string using username and password is formatted as follows:
|
||||
|
||||
```
|
||||
pinot://<username>:<password>@<pinot-broker-host>:<pinot-broker-port>/query/sql?controller=http://<pinot-controller-host>:<pinot-controller-port>/verify_ssl=true``
|
||||
```
|
||||
|
||||
@@ -7,7 +7,7 @@ version: 1
|
||||
|
||||
## Postgres
|
||||
|
||||
Note that, if you're using docker-compose, the Postgres connector library [psycopg2](https://www.psycopg.org/docs/)
|
||||
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:
|
||||
|
||||
@@ -10,7 +10,9 @@ version: 1
|
||||
The [sqlalchemy-redshift](https://pypi.org/project/sqlalchemy-redshift/) library is the recommended
|
||||
way to connect to Redshift through SQLAlchemy.
|
||||
|
||||
You'll need to the following setting values to form the connection string:
|
||||
This dialect requires either [redshift_connector](https://pypi.org/project/redshift-connector/) or [psycopg2](https://pypi.org/project/psycopg2/) to work properly.
|
||||
|
||||
You'll need to set the following values to form the connection string:
|
||||
|
||||
- **User Name**: userName
|
||||
- **Password**: DBPassword
|
||||
@@ -18,8 +20,47 @@ You'll need to the following setting values to form the connection string:
|
||||
- **Database Name**: Database Name
|
||||
- **Port**: default 5439
|
||||
|
||||
Here's what the connection string looks like:
|
||||
|
||||
### psycopg2
|
||||
|
||||
Here's what the SQLALCHEMY URI looks like:
|
||||
|
||||
```
|
||||
redshift+psycopg2://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>
|
||||
```
|
||||
|
||||
|
||||
### redshift_connector
|
||||
|
||||
Here's what the SQLALCHEMY URI looks like:
|
||||
|
||||
```
|
||||
redshift+redshift_connector://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>
|
||||
```
|
||||
|
||||
|
||||
#### Using IAM-based credentials with Redshift cluster:
|
||||
|
||||
[Amazon redshift cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html) also supports generating temporary IAM-based database user credentials.
|
||||
|
||||
Your superset app's [IAM role should have permissions](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-role-permissions.html) to call the `redshift:GetClusterCredentials` operation.
|
||||
|
||||
You have to define the following arguments in Superset's redshift database connection UI under ADVANCED --> Others --> ENGINE PARAMETERS.
|
||||
|
||||
```
|
||||
{"connect_args":{"iam":true,"database":"<database>","cluster_identifier":"<cluster_identifier>","db_user":"<db_user>"}}
|
||||
```
|
||||
and SQLALCHEMY URI should be set to `redshift+redshift_connector://`
|
||||
|
||||
|
||||
#### Using IAM-based credentials with Redshift serverless:
|
||||
|
||||
[Redshift serverless](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-whatis.html) supports connection using IAM roles.
|
||||
|
||||
Your superset app's IAM role should have `redshift-serverless:GetCredentials` and `redshift-serverless:GetWorkgroup` permissions on Redshift serverless workgroup.
|
||||
|
||||
You have to define the following arguments in Superset's redshift database connection UI under ADVANCED --> Others --> ENGINE PARAMETERS.
|
||||
|
||||
```
|
||||
{"connect_args":{"iam":true,"is_serverless":true,"serverless_acct_id":"<aws account number>","serverless_work_group":"<redshift work group>","database":"<database>","user":"IAMR:<superset iam role name>"}}
|
||||
```
|
||||
|
||||
@@ -10,7 +10,16 @@ version: 1
|
||||
The connection string for Rockset is:
|
||||
|
||||
```
|
||||
rockset://apikey:{your-apikey}@api.rs2.usw2.rockset.com/
|
||||
rockset://{api key}:@{api server}
|
||||
```
|
||||
|
||||
Get your API key from the [Rockset console](https://console.rockset.com/apikeys).
|
||||
Find your API server from the [API reference](https://rockset.com/docs/rest-api/#introduction). Omit the `https://` portion of the URL.
|
||||
|
||||
To target to a specific virtual instance, use this URI format:
|
||||
|
||||
```
|
||||
rockset://{api key}:@{api server}/{VI ID}
|
||||
```
|
||||
|
||||
For more complete instructions, we recommend the [Rockset documentation](https://docs.rockset.com/apache-superset/).
|
||||
|
||||