mirror of
https://github.com/apache/superset.git
synced 2026-09-09 00:34:49 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
387d93302f | ||
|
|
47c27ce880 | ||
|
|
bc1e208c1d | ||
|
|
09e871eb63 | ||
|
|
69e24bb029 | ||
|
|
f2236fcb8f | ||
|
|
d0a6706527 | ||
|
|
d0b683cb63 | ||
|
|
c2d24782d9 | ||
|
|
099514d3c0 | ||
|
|
f8491dfc0a | ||
|
|
963e79f423 | ||
|
|
93322aa424 | ||
|
|
19ca78fd94 | ||
|
|
6316a35fed | ||
|
|
c0cb5a8c26 | ||
|
|
eb8b863a86 | ||
|
|
a9b83d3871 | ||
|
|
b5f988f5e9 | ||
|
|
319125ec3b | ||
|
|
982a91ee62 | ||
|
|
bc47bc8f66 | ||
|
|
a52ff13b5d | ||
|
|
545e257537 | ||
|
|
a2831382a9 | ||
|
|
6541a03d0b | ||
|
|
1c16261651 | ||
|
|
2dc3fa3f21 | ||
|
|
1d6a746a09 | ||
|
|
4410fd047e | ||
|
|
b38aadf9e4 | ||
|
|
e7f5100833 | ||
|
|
b78b7b3fad | ||
|
|
183b5ae362 | ||
|
|
bbdb4ee24f | ||
|
|
43ee52be57 | ||
|
|
fc0c1155c2 | ||
|
|
2486fd4f6d | ||
|
|
d8bb2d3e62 | ||
|
|
77d17152bc | ||
|
|
86d2a616c1 | ||
|
|
8e6803f65f | ||
|
|
44c09b5383 | ||
|
|
40fb94dcca | ||
|
|
87a895cc4a | ||
|
|
d645312c7f | ||
|
|
41ccebce91 | ||
|
|
1ec743f29e | ||
|
|
20ab0869fa | ||
|
|
03e4a5b6b7 | ||
|
|
d0be1ff79e | ||
|
|
22f9e12a3b | ||
|
|
69f2af9fb6 | ||
|
|
6898dd916f | ||
|
|
4fbb572568 | ||
|
|
8dd0620fd3 | ||
|
|
2a1235c0c2 | ||
|
|
ebc938059b | ||
|
|
876779865c | ||
|
|
d7fc2031b1 | ||
|
|
45e209d487 | ||
|
|
8a0d321084 | ||
|
|
d435163d13 | ||
|
|
437be4b689 | ||
|
|
6875a1a9e2 | ||
|
|
7ff35dfdfb | ||
|
|
b8356a64ee | ||
|
|
1faaf199ad | ||
|
|
4d2c9324be | ||
|
|
3e8bf96642 | ||
|
|
b0f8f6b6ad | ||
|
|
e392e2ed39 | ||
|
|
91ba897f8e | ||
|
|
a8781c5313 | ||
|
|
919fd496a9 | ||
|
|
aada73302f | ||
|
|
1bc73f2cba | ||
|
|
98b450aa76 | ||
|
|
76fdd072ba | ||
|
|
e7ad03d44f | ||
|
|
ffcacc3393 | ||
|
|
58534b36c5 | ||
|
|
e913ef3261 | ||
|
|
2b57ebaffd | ||
|
|
67535bb320 | ||
|
|
d1afca4fa1 | ||
|
|
b963624e12 | ||
|
|
01de3096b3 | ||
|
|
3e23c103dc | ||
|
|
86233d1676 | ||
|
|
38a7c537ff | ||
|
|
c760030b83 | ||
|
|
fe1d32dc2a | ||
|
|
5d3191bb61 | ||
|
|
70cfb7752c | ||
|
|
2dd20df03d | ||
|
|
852e840575 | ||
|
|
0dfb32cf08 | ||
|
|
3ef63171a9 | ||
|
|
a846015f4d | ||
|
|
392d8a8107 | ||
|
|
ff665fa5a7 | ||
|
|
97e086051c | ||
|
|
13d4902711 | ||
|
|
42fb2286ad | ||
|
|
d1b458c4c5 | ||
|
|
8441590812 | ||
|
|
ec79b7be1f | ||
|
|
55bf72aead | ||
|
|
0807ab44a5 | ||
|
|
7e5440a359 | ||
|
|
6119d8e998 | ||
|
|
d386e66f59 | ||
|
|
9d67b46576 | ||
|
|
25922e341f | ||
|
|
13bf023100 | ||
|
|
c2d11ac53e | ||
|
|
1448f78406 | ||
|
|
11e0f4cb2d | ||
|
|
ca359402bd | ||
|
|
1cc3b9613e | ||
|
|
c01f8101eb | ||
|
|
61325635da | ||
|
|
77a9cc7088 | ||
|
|
b83ee46d0f | ||
|
|
c7112d1c48 | ||
|
|
df04c3af21 | ||
|
|
8db7be16da | ||
|
|
a3e302374b | ||
|
|
01f13c5678 | ||
|
|
c3e89d53c2 | ||
|
|
a49e0b2037 | ||
|
|
7e0e9ac3fc | ||
|
|
fe21de3fc4 | ||
|
|
cab110e354 | ||
|
|
be78cd1a1f | ||
|
|
018caa528a | ||
|
|
e4c8084285 | ||
|
|
ec75dc178b | ||
|
|
38a1f65646 | ||
|
|
df7e2b6a8e | ||
|
|
21c6efea67 | ||
|
|
c1cb3619ab | ||
|
|
3294f77ca5 | ||
|
|
fbf0149d8b | ||
|
|
19d2e10aff | ||
|
|
eadff5f41e | ||
|
|
8ef572a412 | ||
|
|
68e11cd47f | ||
|
|
f1acb2f974 | ||
|
|
6755083e3a | ||
|
|
36bd6d8303 | ||
|
|
21f973f0bd | ||
|
|
ef1f048d81 | ||
|
|
474f1e2044 | ||
|
|
a548b69201 | ||
|
|
321db4674d | ||
|
|
ff71f12fe2 | ||
|
|
cfe927bebb | ||
|
|
c8a794368d | ||
|
|
b77477a9dd | ||
|
|
353038e59e | ||
|
|
596938628c | ||
|
|
4e15e00688 | ||
|
|
83b8d1bc1b | ||
|
|
3c88d2542c | ||
|
|
3a011ecc06 | ||
|
|
f453287a07 | ||
|
|
6392d41ac9 | ||
|
|
4b23d0ecca | ||
|
|
8c5b6b1263 | ||
|
|
15ac075b78 | ||
|
|
9c5264af0d | ||
|
|
b394733ff3 | ||
|
|
55257ab48c | ||
|
|
11869dc076 | ||
|
|
80da1ca995 | ||
|
|
92a66921e0 | ||
|
|
4bb29b6f04 | ||
|
|
89f5785666 | ||
|
|
5952d78121 | ||
|
|
786dadc836 | ||
|
|
c563ea091e | ||
|
|
7980b767c0 | ||
|
|
911462a148 | ||
|
|
778bb8e540 | ||
|
|
bf22487e23 | ||
|
|
d6bd160250 | ||
|
|
468638c5b8 | ||
|
|
1c6173c7ee | ||
|
|
de49f0d2de | ||
|
|
287bc12e45 | ||
|
|
a4fd6b8f33 | ||
|
|
fe08b698f5 | ||
|
|
66201e7c55 | ||
|
|
95ed8735f1 | ||
|
|
bfa6140b15 | ||
|
|
ff08d423a9 | ||
|
|
1920811cf2 | ||
|
|
011af825a9 | ||
|
|
3d357c661c | ||
|
|
ec3f8d07f4 | ||
|
|
36f101e500 | ||
|
|
c0017b3262 | ||
|
|
fd201fe834 | ||
|
|
9e03b6d122 | ||
|
|
2c96c5b341 | ||
|
|
a3b41e2bac | ||
|
|
667eb83e33 | ||
|
|
c60a93db9c | ||
|
|
784d29b57c | ||
|
|
b5e5b3aa62 | ||
|
|
806fb73d25 | ||
|
|
6a81a7961c | ||
|
|
5dd971eaf5 | ||
|
|
7697bc297c | ||
|
|
89817d4cee | ||
|
|
b427a80a4f | ||
|
|
b5c95c537c | ||
|
|
6c06866583 | ||
|
|
dcb9f7cff1 | ||
|
|
284402c583 | ||
|
|
cc075f23ef | ||
|
|
f06d53455c | ||
|
|
e3efaba775 | ||
|
|
56dc74e09f | ||
|
|
a82d72fef6 | ||
|
|
1638e6e932 | ||
|
|
4602ead10c | ||
|
|
3b11654c5a | ||
|
|
ab0f5e3087 | ||
|
|
34991f5fab | ||
|
|
c0888dc16d | ||
|
|
7fb138381f | ||
|
|
8b9c142e2b | ||
|
|
4b29789b64 | ||
|
|
f3becbeb4f | ||
|
|
09f68c9c7b | ||
|
|
b9e601487a | ||
|
|
f19f2c3ac8 | ||
|
|
d006178c03 | ||
|
|
d489d0018c | ||
|
|
fa1e028974 | ||
|
|
f291ba05c6 | ||
|
|
31b14dcc88 | ||
|
|
592c566bb4 | ||
|
|
203512e189 | ||
|
|
12982ef387 | ||
|
|
f2d65989ab | ||
|
|
9a4de232a7 | ||
|
|
61129f749f | ||
|
|
7e394e556a | ||
|
|
555d7bbb35 | ||
|
|
35f33e8276 | ||
|
|
e06290663a | ||
|
|
abd4051f7a | ||
|
|
541d23bbd1 | ||
|
|
e829aa52eb | ||
|
|
e640b7f0e0 | ||
|
|
a0a00e6470 | ||
|
|
4187d9e4c4 | ||
|
|
f6f412b4ae | ||
|
|
1d8d0675e6 | ||
|
|
65940770ac | ||
|
|
4789074309 | ||
|
|
762101018b | ||
|
|
a1442497d4 | ||
|
|
73a2cc322a | ||
|
|
42c7e2cae6 | ||
|
|
bb677b8ef1 | ||
|
|
9156f089ff | ||
|
|
a5c4db3aee | ||
|
|
1dbc1496b2 | ||
|
|
a7f48c6599 | ||
|
|
5315d2cc2d | ||
|
|
6fd62e3f7e | ||
|
|
ec5d2f5f32 | ||
|
|
9fd297f636 | ||
|
|
28fe6e0ef1 | ||
|
|
7ae80e9d66 | ||
|
|
1252fd700e | ||
|
|
8ddcba82e0 | ||
|
|
11dd2493b3 | ||
|
|
ca506e9396 | ||
|
|
507041e93b | ||
|
|
ceb88926ff | ||
|
|
d54cc6d82a | ||
|
|
9d6832dc27 | ||
|
|
3c4591ef15 | ||
|
|
6fe4cc0c51 | ||
|
|
9031e69dc2 | ||
|
|
ce2760edf7 | ||
|
|
f81b746556 | ||
|
|
2a4e4b320c | ||
|
|
304e3b36eb | ||
|
|
4ae9b819d3 | ||
|
|
9d0bb3a3ba | ||
|
|
3394421fa8 | ||
|
|
ac43f4c491 | ||
|
|
84560e8527 | ||
|
|
33f7845010 | ||
|
|
467848d8f7 | ||
|
|
9f53c6c5bc | ||
|
|
9fa52b50ed | ||
|
|
18ff484186 | ||
|
|
24f805ebc4 | ||
|
|
55ba47ec2e | ||
|
|
5842cb1b12 | ||
|
|
db1d598f50 | ||
|
|
a45a5e1060 | ||
|
|
5ae91e2dd8 | ||
|
|
3cfeb43878 | ||
|
|
b247279ffe | ||
|
|
64f967cb2d | ||
|
|
be8f8d9c1f | ||
|
|
e61f5a924b | ||
|
|
416f188328 | ||
|
|
2aedaaa03e | ||
|
|
086238fb10 | ||
|
|
930cbea2e1 | ||
|
|
3ad9c910f9 | ||
|
|
52b5ea33d7 | ||
|
|
7c23dfc195 | ||
|
|
3e4c3bddb9 | ||
|
|
1d5c58d005 | ||
|
|
71ca5aca5b | ||
|
|
fd63ac3687 | ||
|
|
2c3d9e9b1e | ||
|
|
7efe5a8485 | ||
|
|
3ea2311b87 | ||
|
|
6137a200a3 | ||
|
|
5a50120f9c | ||
|
|
ff0c9e93c3 | ||
|
|
c72c5c735b | ||
|
|
f18d14a51a | ||
|
|
9773aba522 | ||
|
|
fd7c9eb71e | ||
|
|
452b53092b | ||
|
|
5b79f84e1b | ||
|
|
bbc306c64f | ||
|
|
54b2bda2b0 | ||
|
|
3e646799a1 | ||
|
|
2deb9c294e | ||
|
|
aa92c1e7eb | ||
|
|
6c3bfe80dc | ||
|
|
daefebb49d | ||
|
|
1a67f1564c | ||
|
|
95a017aa2d | ||
|
|
fa072cd74e | ||
|
|
87d1afcc65 | ||
|
|
375ded92ef | ||
|
|
ebd4a917f7 | ||
|
|
df9352f2b4 | ||
|
|
7e6beb5ebf | ||
|
|
e6c5bf4d54 | ||
|
|
b97bbed2a9 | ||
|
|
ecfcaea803 | ||
|
|
81b64204c7 | ||
|
|
69a5ed9a1e | ||
|
|
08d0deb720 | ||
|
|
577ecc284f | ||
|
|
9efe1a44ec | ||
|
|
13f7e0d755 | ||
|
|
adc247b7e4 | ||
|
|
3f2e2c9976 | ||
|
|
64785c20bd | ||
|
|
db57f90a34 | ||
|
|
697cdf26b3 | ||
|
|
abf2c87115 | ||
|
|
c0fc1ae018 | ||
|
|
036fc3944d | ||
|
|
7b74eb2730 | ||
|
|
0e0c99b2fb | ||
|
|
aa0cd64940 | ||
|
|
4bdb958ce6 | ||
|
|
bd1d6acb0c | ||
|
|
72d19b6b35 | ||
|
|
98a26e7628 | ||
|
|
0819beaedc | ||
|
|
65b4be7b51 | ||
|
|
bf424e3351 | ||
|
|
21cc49509f | ||
|
|
10d88726db | ||
|
|
f2c50f62ad | ||
|
|
3078c84d40 | ||
|
|
df5fb5a97c | ||
|
|
1e88408418 | ||
|
|
868e063b03 | ||
|
|
714d262336 | ||
|
|
335415f5a2 | ||
|
|
cd2f53ed7b | ||
|
|
d1e93078f4 | ||
|
|
4de6040d89 | ||
|
|
fc345b9ab1 | ||
|
|
a35825de7b | ||
|
|
ae66f5fa78 | ||
|
|
6b30f55cfd | ||
|
|
67ffea8248 | ||
|
|
06d6d7f8e2 | ||
|
|
4fc41e1cce | ||
|
|
6e303f3c12 | ||
|
|
1835ed02da | ||
|
|
a0e3754173 | ||
|
|
de0c6c9c56 | ||
|
|
817b740f59 | ||
|
|
609c3594ef | ||
|
|
1a46f93057 | ||
|
|
d439da2fe0 | ||
|
|
1b95ed7267 | ||
|
|
7656b2e68b | ||
|
|
1470e70c10 | ||
|
|
901acd936f | ||
|
|
fd4e5c85b2 | ||
|
|
b5ea5d085c | ||
|
|
bebac5921b | ||
|
|
5fca19da56 | ||
|
|
d1f6245bcd | ||
|
|
b9884fb55b | ||
|
|
70ccc26421 | ||
|
|
d509b157fd | ||
|
|
1d1a1cdc20 | ||
|
|
226dd4b907 | ||
|
|
9e964f4720 | ||
|
|
fc36de2d1f | ||
|
|
f0a9dccc70 | ||
|
|
6d2d3addc2 | ||
|
|
b21d2cfcac | ||
|
|
375797f649 | ||
|
|
c91c45574b | ||
|
|
9b8e2555bf | ||
|
|
40fc144bbe | ||
|
|
6e4825165a | ||
|
|
ec286f27c4 | ||
|
|
139c7878a5 | ||
|
|
49eeab6f55 | ||
|
|
f504b7fdd6 | ||
|
|
7b370e6f17 | ||
|
|
3970d7316b | ||
|
|
45972e9945 | ||
|
|
d0714a0972 | ||
|
|
0b213bf484 | ||
|
|
975dc2fe98 | ||
|
|
095c15a1f1 | ||
|
|
4284800cf1 | ||
|
|
c1e9287cf1 | ||
|
|
b6b7982a81 | ||
|
|
c8759a38bf | ||
|
|
b17e7aa5c9 | ||
|
|
8d48d2e37b | ||
|
|
491fbd16f7 | ||
|
|
94fc5d586e | ||
|
|
9fc03f0424 | ||
|
|
528ea9cbb0 | ||
|
|
d2e03ab9b4 | ||
|
|
c3c73763d0 | ||
|
|
0318b6d4ae | ||
|
|
483405fff9 | ||
|
|
95809e5e60 | ||
|
|
09e5ea1f3d | ||
|
|
6026e7d47a | ||
|
|
7f0fbb5b45 | ||
|
|
ca27b00f3a | ||
|
|
cfc83c271c | ||
|
|
dc1eb305b1 | ||
|
|
026782eb13 | ||
|
|
26e36ae484 | ||
|
|
66a7318fa2 | ||
|
|
9c9862ff5b | ||
|
|
26b75fadc4 | ||
|
|
8b38d63b7d | ||
|
|
dc170397c5 | ||
|
|
65cec1872d | ||
|
|
327e9b05c0 | ||
|
|
51f05ea257 | ||
|
|
c3e19b2cf1 | ||
|
|
45aa812cb0 | ||
|
|
e9d5d3b137 | ||
|
|
7d270bced6 | ||
|
|
694ae6f90e | ||
|
|
f2616294e6 | ||
|
|
70e12ed27d | ||
|
|
b04aebfa99 | ||
|
|
f19a830d9b | ||
|
|
488da65986 | ||
|
|
391d909d1e | ||
|
|
fd5ce35728 | ||
|
|
19c8a62254 | ||
|
|
f91b4388ba | ||
|
|
5811e3f1ee | ||
|
|
a36c8336ec | ||
|
|
6028a691b7 | ||
|
|
8f09c62c17 | ||
|
|
08183dfe57 | ||
|
|
36fda5e840 | ||
|
|
3c62069bbb | ||
|
|
892eef1af6 | ||
|
|
f706e6e7a2 | ||
|
|
b4ca39ceeb | ||
|
|
1697e1e3b1 | ||
|
|
1e3130d588 | ||
|
|
f9fc85453e | ||
|
|
f756518a9e | ||
|
|
cd3f5214fa | ||
|
|
7055c05218 | ||
|
|
f3f37b0229 | ||
|
|
45cca3a945 | ||
|
|
abfd3734cf | ||
|
|
33bec57619 | ||
|
|
e11d0cbf44 | ||
|
|
72721845e1 | ||
|
|
8395b3d6c8 | ||
|
|
776685736c | ||
|
|
d39bc14a0b | ||
|
|
94d0bb9e7f | ||
|
|
970e473d10 | ||
|
|
8ab45c90cc | ||
|
|
0b114fcbc5 | ||
|
|
27f7d1157f | ||
|
|
29d6420ecc | ||
|
|
0a00153375 | ||
|
|
6954114f84 | ||
|
|
8ef52babfe | ||
|
|
e8114be99a | ||
|
|
3fbd44ecce | ||
|
|
9a05d6afe5 | ||
|
|
e4a0233181 | ||
|
|
75677f42bc | ||
|
|
6297ad7c8b | ||
|
|
99a0c8a8a1 | ||
|
|
6e3121268e | ||
|
|
9e2455aab7 | ||
|
|
e37c2bf8fd | ||
|
|
8db5d43969 | ||
|
|
a5a31e0e60 | ||
|
|
af3a46048d | ||
|
|
c02079278e | ||
|
|
974f4476e5 | ||
|
|
fc180ab2a6 | ||
|
|
741219e84d | ||
|
|
a646914493 | ||
|
|
1e2ea36e70 | ||
|
|
b5379bc8c5 | ||
|
|
efeb5a93e6 | ||
|
|
9b5e66b728 | ||
|
|
e8d50356a2 | ||
|
|
87d6ad28ad | ||
|
|
15567dd627 | ||
|
|
73ce2f1ea7 | ||
|
|
42ab57850d | ||
|
|
7ee8d114d2 | ||
|
|
d8bd8ec896 | ||
|
|
4bc2daf4c1 | ||
|
|
c1aacde304 | ||
|
|
19a60435b0 | ||
|
|
786c12d52d | ||
|
|
eea5fe3b60 | ||
|
|
571b53e9cf | ||
|
|
42ff4fc19a | ||
|
|
85d1e80544 | ||
|
|
b34c863825 | ||
|
|
63e4e8a62b | ||
|
|
bcaa484aa9 | ||
|
|
66653ef306 | ||
|
|
409fc83ca9 | ||
|
|
9335b9c983 | ||
|
|
9489f0b8f4 | ||
|
|
aa50161933 | ||
|
|
3d23adec5e | ||
|
|
3c58fc5ef5 | ||
|
|
1e17ef3410 | ||
|
|
51c90ec013 | ||
|
|
2ff8741248 | ||
|
|
f85497e69b | ||
|
|
fcd443d366 | ||
|
|
d48b894573 | ||
|
|
ad4ca2223e | ||
|
|
91db008d72 | ||
|
|
4c544500a7 | ||
|
|
2d95bfcd99 | ||
|
|
5cbe2ac760 | ||
|
|
450215549f | ||
|
|
e01015f792 | ||
|
|
13a5b439fe | ||
|
|
9568985b7b | ||
|
|
e1bb7f4364 | ||
|
|
6e09156598 | ||
|
|
ad2aed5a68 | ||
|
|
9c9becc3d5 | ||
|
|
189aced320 | ||
|
|
da478531b2 | ||
|
|
c787f46f10 | ||
|
|
8b40bf695f | ||
|
|
beee11de0f | ||
|
|
f10dbbe0ac | ||
|
|
44723eabbe | ||
|
|
981deaaa22 | ||
|
|
2e93784f86 | ||
|
|
94893ff280 | ||
|
|
5aa38ef929 | ||
|
|
5ab613d89e | ||
|
|
d8c32b8097 | ||
|
|
c9f76d58f0 | ||
|
|
cc9103b0e2 | ||
|
|
2e6ea76631 | ||
|
|
613945a200 | ||
|
|
d0b00bc08f | ||
|
|
2dbe92ba2f | ||
|
|
24ebf10976 | ||
|
|
312cbf736c | ||
|
|
10296651fb | ||
|
|
5b669b3d79 | ||
|
|
d55a040acd | ||
|
|
2010e64c94 | ||
|
|
bc4c837da3 | ||
|
|
6b615c4479 | ||
|
|
56fca17e62 | ||
|
|
dae1258903 | ||
|
|
d6fc720f4c | ||
|
|
acca3a4431 | ||
|
|
956f276e70 | ||
|
|
85d02620b7 | ||
|
|
86807e40b7 | ||
|
|
870886ca2f | ||
|
|
6bc28a087c | ||
|
|
fa4c118e2d | ||
|
|
0cf57756f0 | ||
|
|
7f7e113de2 | ||
|
|
a6df28482e | ||
|
|
ad380fd0f8 | ||
|
|
c5781cde60 | ||
|
|
42c4facb7e | ||
|
|
6c9f315b77 | ||
|
|
c1e10c4627 | ||
|
|
4183a03542 | ||
|
|
7b8a0e184b | ||
|
|
249b51bfba | ||
|
|
3e0681b438 | ||
|
|
b3a814fa27 | ||
|
|
1a961022b9 |
@@ -66,6 +66,7 @@ github:
|
||||
- cypress-matrix (3, chrome)
|
||||
- docker-build
|
||||
- frontend-build
|
||||
- pre-commit (3.7)
|
||||
- python-lint (3.7)
|
||||
- test-mysql (3.7)
|
||||
- test-postgres (3.7)
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
codecov:
|
||||
notify:
|
||||
after_n_builds: 4
|
||||
ignore:
|
||||
- "superset/migrations/versions/*.py"
|
||||
- "**/*.stories.tsx"
|
||||
- "**/*.stories.jsx"
|
||||
coverage:
|
||||
status:
|
||||
project:
|
||||
default:
|
||||
informational: true
|
||||
# Commits pushed to master should not make the overall
|
||||
# project coverage decrease:
|
||||
target: auto
|
||||
threshold: 0%
|
||||
patch:
|
||||
default:
|
||||
informational: true
|
||||
threshold: 0%
|
||||
flag_management:
|
||||
default_rules:
|
||||
carryforward: true
|
||||
|
||||
+8
-2
@@ -15,6 +15,9 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
**/__pycache__/
|
||||
**/.git
|
||||
**/.apache_superset.egg-info
|
||||
**/.github
|
||||
**/.mypy_cache
|
||||
**/.pytest_cache
|
||||
**/.tox
|
||||
@@ -30,11 +33,14 @@
|
||||
**/*.pyc
|
||||
**/*.sqllite
|
||||
**/*.swp
|
||||
**/.terser-plugin-cache/
|
||||
**/.storybook/
|
||||
**/node_modules/
|
||||
|
||||
tests/
|
||||
docs/
|
||||
install/
|
||||
superset-frontend/node_modules/
|
||||
superset-frontend/cypress/
|
||||
superset-frontend/cypress-base/
|
||||
superset-frontend/coverage/
|
||||
superset/static/assets/
|
||||
venv
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
# Notify all committers of DB migration changes, per SIP-59
|
||||
# https://github.com/apache/superset/issues/13351
|
||||
/superset/migrations/ @apache/superset-committers
|
||||
|
||||
# Notify Preset team when ephemeral env settings are changed
|
||||
.github/workflows/ecs-task-definition.json @robdiciuccio @craig-rueda @benjreinhart
|
||||
.github/workflows/docker-ephemeral-env.yml @robdiciuccio @craig-rueda @benjreinhart
|
||||
.github/workflows/ephemeral*.yml @robdiciuccio @craig-rueda @benjreinhart
|
||||
@@ -12,7 +12,9 @@
|
||||
<!--- HINT: Include "Fixes #nnn" if you are fixing an existing issue -->
|
||||
- [ ] Has associated issue:
|
||||
- [ ] Changes UI
|
||||
- [ ] Requires DB Migration.
|
||||
- [ ] Confirm DB Migration upgrade and downgrade tested.
|
||||
- [ ] Includes DB Migration (follow approval process in [SIP-59](https://github.com/apache/superset/issues/13351))
|
||||
- [ ] Migration is atomic, supports rollback & is backwards-compatible
|
||||
- [ ] Confirm DB migration upgrade and downgrade tested
|
||||
- [ ] Runtime estimates and downtime expectations provided
|
||||
- [ ] Introduces new feature or API
|
||||
- [ ] Removes existing feature or API
|
||||
|
||||
Submodule
+1
Submodule .github/actions/chart-releaser-action added at 120944e663
Submodule
+1
Submodule .github/actions/chart-testing-action added at b0d4458c71
Submodule .github/actions/github-action-push-to-another-repository added at 5c472514b3
@@ -131,12 +131,7 @@ testdata() {
|
||||
|
||||
codecov() {
|
||||
say "::group::Upload code coverage"
|
||||
local codecovScript="${HOME}/codecov.sh"
|
||||
# download bash script if needed
|
||||
if [[ ! -f "$codecovScript" ]]; then
|
||||
curl -s https://codecov.io/bash >"$codecovScript"
|
||||
fi
|
||||
bash "$codecovScript" "$@"
|
||||
bash ".github/workflows/codecov.sh" "$@"
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
@@ -191,11 +186,6 @@ cypress-run-all() {
|
||||
|
||||
cypress-run "*/**/*"
|
||||
|
||||
# Upload code coverage separately so each page can have separate flags
|
||||
# -c will clean existing coverage reports, -F means add flags
|
||||
# || true to prevent CI failure on codecov upload
|
||||
codecov -cF "cypress" || true
|
||||
|
||||
# After job is done, print out Flask log for debugging
|
||||
say "::group::Flask log for default run"
|
||||
cat "$flasklog"
|
||||
@@ -211,8 +201,10 @@ cypress-run-all() {
|
||||
|
||||
cypress-run "sqllab/*" "Backend persist"
|
||||
|
||||
# Upload code coverage separately so each page can have separate flags
|
||||
# -c will clean existing coverage reports, -F means add flags
|
||||
# || true to prevent CI failure on codecov upload
|
||||
codecov -cF "cypress" || true
|
||||
codecov -c -F "cypress" || true
|
||||
|
||||
say "::group::Flask log for backend persist"
|
||||
cat "$flasklog"
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
name: Check DB migration conflict
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- "superset/migrations/**"
|
||||
|
||||
jobs:
|
||||
check_db_migration_conflict:
|
||||
name: Check DB migration conflict
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
- name: Check and notify
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
// API reference: https://octokit.github.io/rest.js
|
||||
const currentBranch = context.ref.replace('refs/heads/', '');
|
||||
|
||||
// Find all pull requests to current branch
|
||||
const opts = github.pulls.list.endpoint.merge({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
base: context.ref,
|
||||
state: 'open',
|
||||
sort: 'updated',
|
||||
per_page: 100,
|
||||
});
|
||||
const pulls = await github.paginate(opts);
|
||||
if (pulls.length > 0) {
|
||||
console.log(`Found ${pulls.length} open PRs for base branch "${currentBranch}"`)
|
||||
}
|
||||
|
||||
for (const pull of pulls) {
|
||||
const listFilesOpts = await github.pulls.listFiles.endpoint.merge({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: pull.number,
|
||||
});
|
||||
const files = await github.paginate(listFilesOpts);
|
||||
if (
|
||||
files.some(x => x.contents_url.includes('/contents/superset/migrations'))
|
||||
) {
|
||||
console.log(`PR #${pull.number} "${pull.title}" also added db migration`)
|
||||
await github.issues.createComment({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: pull.number,
|
||||
body:
|
||||
`⚠️ @${pull.user.login} Your base branch \`${currentBranch}\` has just ` +
|
||||
'also updated `superset/migrations`.\n' +
|
||||
'\n' +
|
||||
'❗ **Please consider rebasing your branch to avoid db migration conflicts.**',
|
||||
});
|
||||
}
|
||||
}
|
||||
Executable
+1903
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,78 @@
|
||||
name: Push ephmereral env image
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Docker"]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
docker_ephemeral_env:
|
||||
name: Push ephemeral env Docker image to ECR
|
||||
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
||||
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
|
||||
@@ -24,3 +24,19 @@ jobs:
|
||||
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
run: |
|
||||
.github/workflows/docker_build_push.sh
|
||||
|
||||
- name: Build ephemeral env image
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
mkdir -p ./build
|
||||
echo ${{ github.sha }} > ./build/SHA
|
||||
echo ${{ github.event.pull_request.number }} > ./build/PR-NUM
|
||||
docker build --target ci -t ${{ github.sha }} -t "pr-${{ github.event.pull_request.number }}" .
|
||||
docker save ${{ github.sha }} | gzip > ./build/${{ github.sha }}.tar.gz
|
||||
|
||||
- name: Upload build artifacts
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: build
|
||||
path: build/
|
||||
|
||||
@@ -21,14 +21,14 @@ 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]/-/' | head -c 40)
|
||||
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]/-/' | head -c 40)
|
||||
REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/heads/::' | sed 's/[^a-zA-Z0-9]/-/g' | head -c 40)
|
||||
LATEST_TAG="${REFSPEC}"
|
||||
fi
|
||||
|
||||
@@ -76,5 +76,5 @@ else
|
||||
# Login and push
|
||||
docker logout
|
||||
docker login --username "${DOCKERHUB_USER}" --password "${DOCKERHUB_TOKEN}"
|
||||
docker push "${REPO_NAME}"
|
||||
docker push --all-tags "${REPO_NAME}"
|
||||
fi
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"containerDefinitions": [
|
||||
{
|
||||
"name": "superset-ci",
|
||||
"image": "apache/superset:latest",
|
||||
"cpu": 0,
|
||||
"links": [],
|
||||
"portMappings": [
|
||||
{
|
||||
"containerPort": 8080,
|
||||
"hostPort": 8080,
|
||||
"protocol": "tcp"
|
||||
}
|
||||
],
|
||||
"essential": true,
|
||||
"entryPoint": [],
|
||||
"command": [],
|
||||
"environment": [
|
||||
{
|
||||
"name": "SUPERSET_LOAD_EXAMPLES",
|
||||
"value": "yes"
|
||||
},
|
||||
{
|
||||
"name": "SUPERSET_PORT",
|
||||
"value": "8080"
|
||||
}
|
||||
],
|
||||
"mountPoints": [],
|
||||
"volumesFrom": [],
|
||||
"logConfiguration": {
|
||||
"logDriver": "awslogs",
|
||||
"options": {
|
||||
"awslogs-group": "/ecs/superset-ci",
|
||||
"awslogs-region": "us-west-2",
|
||||
"awslogs-stream-prefix": "ecs"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"family": "superset-ci",
|
||||
"taskRoleArn": "ecsTaskExecutionRole",
|
||||
"executionRoleArn": "ecsTaskExecutionRole",
|
||||
"networkMode": "awsvpc",
|
||||
"volumes": [],
|
||||
"placementConstraints": [],
|
||||
"requiresCompatibilities": [
|
||||
"FARGATE"
|
||||
],
|
||||
"cpu": "512",
|
||||
"memory": "1024"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
name: Cleanup ephemeral envs (PR close)
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [closed]
|
||||
|
||||
jobs:
|
||||
ephemeral-env-cleanup:
|
||||
name: Cleanup ephemeral envs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- 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: Describe ECS service
|
||||
id: describe-services
|
||||
run: |
|
||||
echo "::set-output name=active::$(aws ecs describe-services --cluster superset-ci --services pr-${{ github.event.number }}-service | jq '.services[] | select(.status == "ACTIVE") | any')"
|
||||
|
||||
- name: Delete ECS service
|
||||
if: steps.describe-services.outputs.active == 'true'
|
||||
id: delete-service
|
||||
run: |
|
||||
aws ecs delete-service \
|
||||
--cluster superset-ci \
|
||||
--service pr-${{ github.event.number }}-service \
|
||||
--force
|
||||
|
||||
- name: Login to Amazon ECR
|
||||
if: steps.describe-services.outputs.active == 'true'
|
||||
id: login-ecr
|
||||
uses: aws-actions/amazon-ecr-login@v1
|
||||
|
||||
- name: Delete ECR image tag
|
||||
if: steps.describe-services.outputs.active == 'true'
|
||||
id: delete-image-tag
|
||||
run: |
|
||||
aws ecr batch-delete-image \
|
||||
--registry-id $(echo "${{ steps.login-ecr.outputs.registry }}" | grep -Eo "^[0-9]+") \
|
||||
--repository-name superset-ci \
|
||||
--image-ids imageTag=pr-${{ github.event.number }}
|
||||
|
||||
- name: Comment (success)
|
||||
if: steps.describe-services.outputs.active == 'true'
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
github.issues.createComment({
|
||||
issue_number: ${{ github.event.number }},
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: 'Ephemeral environment shutdown and build artifacts deleted.'
|
||||
})
|
||||
@@ -0,0 +1,195 @@
|
||||
name: Ephemeral env workflow
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
ephemeral_env_comment:
|
||||
if: github.event.issue.pull_request
|
||||
name: Evaluate ephemeral env comment trigger (/testenv)
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
slash-command: ${{ steps.eval-body.outputs.result }}
|
||||
feature-flags: ${{ steps.eval-feature-flags.outputs.result }}
|
||||
|
||||
steps:
|
||||
- name: Debug
|
||||
run: |
|
||||
echo "Comment on PR #${{ github.event.issue.number }} by ${{ github.event.issue.user.login }}, ${{ github.event.comment.author_association }}"
|
||||
echo "Comment body: ${{ github.event.comment.body }}"
|
||||
|
||||
- name: Eval comment body for /testenv slash command
|
||||
uses: actions/github-script@v3
|
||||
id: eval-body
|
||||
with:
|
||||
result-encoding: string
|
||||
script: |
|
||||
const pattern = /^\/testenv (up|down)/
|
||||
const result = pattern.exec(context.payload.comment.body)
|
||||
return result === null ? 'noop' : result[1]
|
||||
|
||||
- name: Eval comment body for feature flags
|
||||
uses: actions/github-script@v3
|
||||
id: eval-feature-flags
|
||||
with:
|
||||
script: |
|
||||
const pattern = /FEATURE_(\w+)=(\w+)/g;
|
||||
let results = [];
|
||||
[...context.payload.comment.body.matchAll(pattern)].forEach(match => {
|
||||
const config = {
|
||||
name: `SUPERSET_FEATURE_${match[1]}`,
|
||||
value: match[2],
|
||||
};
|
||||
results.push(config);
|
||||
});
|
||||
return results;
|
||||
|
||||
- name: Limit to committers
|
||||
if: >
|
||||
steps.eval-body.outputs.result != 'noop' &&
|
||||
github.event.comment.author_association != 'MEMBER' &&
|
||||
github.event.comment.author_association != 'OWNER'
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
const errMsg = '@${{ github.event.comment.user.login }} Ephemeral environment creation is currently limited to committers.'
|
||||
github.issues.createComment({
|
||||
issue_number: ${{ github.event.issue.number }},
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: errMsg
|
||||
})
|
||||
core.setFailed(errMsg)
|
||||
|
||||
ephemeral_env_up:
|
||||
needs: ephemeral_env_comment
|
||||
if: needs.ephemeral_env_comment.outputs.slash-command == 'up'
|
||||
name: Spin up an ephemeral environment
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- 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: Check target image exists in ECR
|
||||
id: check-image
|
||||
continue-on-error: true
|
||||
run: |
|
||||
aws ecr describe-images \
|
||||
--registry-id $(echo "${{ steps.login-ecr.outputs.registry }}" | grep -Eo "^[0-9]+") \
|
||||
--repository-name superset-ci \
|
||||
--image-ids imageTag=pr-${{ github.event.issue.number }}
|
||||
|
||||
- name: Fail on missing container image
|
||||
if: steps.check-image.outcome == 'failure'
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
const errMsg = '@${{ github.event.comment.user.login }} Container image not yet published for this PR. Please try again when build is complete.'
|
||||
github.issues.createComment({
|
||||
issue_number: ${{ github.event.issue.number }},
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: errMsg
|
||||
})
|
||||
core.setFailed(errMsg)
|
||||
|
||||
- name: Fill in the new image ID in the Amazon ECS task definition
|
||||
id: task-def
|
||||
uses: aws-actions/amazon-ecs-render-task-definition@v1
|
||||
with:
|
||||
task-definition: .github/workflows/ecs-task-definition.json
|
||||
container-name: superset-ci
|
||||
image: ${{ steps.login-ecr.outputs.registry }}/superset-ci:pr-${{ github.event.issue.number }}
|
||||
|
||||
- name: Update env vars in the Amazon ECS task definition
|
||||
run: |
|
||||
cat <<< "$(jq '.containerDefinitions[0].environment += ${{ needs.ephemeral_env_comment.outputs.feature-flags }}' < ${{ steps.task-def.outputs.task-definition }})" > ${{ steps.task-def.outputs.task-definition }}
|
||||
|
||||
- name: Describe ECS service
|
||||
id: describe-services
|
||||
run: |
|
||||
echo "::set-output name=active::$(aws ecs describe-services --cluster superset-ci --services pr-${{ github.event.issue.number }}-service | jq '.services[] | select(.status == "ACTIVE") | any')"
|
||||
|
||||
- name: Create ECS service
|
||||
if: steps.describe-services.outputs.active != 'true'
|
||||
id: create-service
|
||||
env:
|
||||
ECR_SUBNETS: subnet-0e15a5034b4121710,subnet-0e8efef4a72224974
|
||||
ECR_SECURITY_GROUP: sg-092ff3a6ae0574d91
|
||||
run: |
|
||||
aws ecs create-service \
|
||||
--cluster superset-ci \
|
||||
--service-name pr-${{ github.event.issue.number }}-service \
|
||||
--task-definition superset-ci \
|
||||
--launch-type FARGATE \
|
||||
--desired-count 1 \
|
||||
--platform-version LATEST \
|
||||
--network-configuration "awsvpcConfiguration={subnets=[$ECR_SUBNETS],securityGroups=[$ECR_SECURITY_GROUP],assignPublicIp=ENABLED}" \
|
||||
--tags key=pr,value=${{ github.event.issue.number }} key=github_user,value=${{ github.actor }}
|
||||
|
||||
- name: Deploy Amazon ECS task definition
|
||||
id: deploy-task
|
||||
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
|
||||
with:
|
||||
task-definition: ${{ steps.task-def.outputs.task-definition }}
|
||||
service: pr-${{ github.event.issue.number }}-service
|
||||
cluster: superset-ci
|
||||
wait-for-service-stability: true
|
||||
wait-for-minutes: 10
|
||||
|
||||
- name: List tasks
|
||||
id: list-tasks
|
||||
run: |
|
||||
echo "::set-output name=task::$(aws ecs list-tasks --cluster superset-ci --service-name pr-${{ github.event.issue.number }}-service | jq '.taskArns | first')"
|
||||
|
||||
- name: Get network interface
|
||||
id: get-eni
|
||||
run: |
|
||||
echo "::set-output name=eni::$(aws ecs describe-tasks --cluster superset-ci --tasks ${{ steps.list-tasks.outputs.task }} | jq '.tasks | .[0] | .attachments | .[0] | .details | map(select(.name=="networkInterfaceId")) | .[0] | .value')"
|
||||
|
||||
- name: Get public IP
|
||||
id: get-ip
|
||||
run: |
|
||||
echo "::set-output name=ip::$(aws ec2 describe-network-interfaces --network-interface-ids ${{ steps.get-eni.outputs.eni }} | jq -r '.NetworkInterfaces | first | .Association.PublicIp')"
|
||||
|
||||
- name: Comment (success)
|
||||
if: ${{ success() }}
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
github.issues.createComment({
|
||||
issue_number: ${{ github.event.issue.number }},
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: '@${{ github.event.comment.user.login }} Ephemeral environment spinning up at http://${{ steps.get-ip.outputs.ip }}:8080. Credentials are `admin`/`admin`. Please allow several minutes for bootstrapping and startup.'
|
||||
})
|
||||
|
||||
- name: Comment (failure)
|
||||
if: ${{ failure() }}
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
github.issues.createComment({
|
||||
issue_number: ${{ github.event.issue.number }},
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
body: '@${{ github.event.comment.user.login }} Ephemeral environment creation failed. Please check the Actions logs for details.'
|
||||
})
|
||||
@@ -9,14 +9,15 @@ on:
|
||||
- "docs/**"
|
||||
|
||||
jobs:
|
||||
docs:
|
||||
name: docs
|
||||
build-deploy:
|
||||
name: Build & Deploy
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
- name: npm install
|
||||
working-directory: ./docs
|
||||
run: |
|
||||
@@ -29,3 +30,15 @@ jobs:
|
||||
working-directory: ./docs
|
||||
run: |
|
||||
npm run build
|
||||
- name: deploy docs
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: ./.github/actions/github-action-push-to-another-repository
|
||||
env:
|
||||
API_TOKEN_GITHUB: ${{ secrets.SUPERSET_SITE_BUILD }}
|
||||
with:
|
||||
source-directory: './docs/public'
|
||||
destination-github-username: 'apache'
|
||||
destination-repository-name: 'superset-site'
|
||||
target-branch: 'asf-site'
|
||||
commit-message: "deploying docs: ${{ github.event.head_commit.message }} (apache/superset@${{ github.sha }})"
|
||||
user-email: dev@superset.apache.org
|
||||
|
||||
@@ -44,5 +44,4 @@ jobs:
|
||||
- name: Upload code coverage
|
||||
if: steps.check.outcome == 'failure'
|
||||
working-directory: ./superset-frontend
|
||||
run: |
|
||||
bash <(curl -s https://codecov.io/bash) -cF javascript
|
||||
run: ../.github/workflows/codecov.sh -c -F javascript
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
name: Lint and Test Charts
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, edited, reopened, synchronize]
|
||||
|
||||
jobs:
|
||||
lint-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v1
|
||||
with:
|
||||
version: v3.5.4
|
||||
|
||||
- uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.7
|
||||
|
||||
- name: Set up chart-testing
|
||||
uses: ./.github/actions/chart-testing-action
|
||||
|
||||
- name: Run chart-testing (list-changed)
|
||||
id: list-changed
|
||||
run: |
|
||||
changed=$(ct list-changed --print-config)
|
||||
if [[ -n "$changed" ]]; then
|
||||
echo "::set-output name=changed::true"
|
||||
fi
|
||||
env:
|
||||
CT_CHART_DIRS: helm
|
||||
CT_SINCE: HEAD
|
||||
|
||||
- name: Run chart-testing (lint)
|
||||
run: ct lint --print-config
|
||||
env:
|
||||
CT_CHART_DIRS: helm
|
||||
CT_LINT_CONF: lintconf.yaml
|
||||
CT_SINCE: HEAD
|
||||
@@ -0,0 +1,37 @@
|
||||
name: Release Charts
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
paths:
|
||||
- 'helm/**'
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Configure Git
|
||||
run: |
|
||||
git config user.name "$GITHUB_ACTOR"
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
|
||||
- name: Install Helm
|
||||
uses: azure/setup-helm@v1
|
||||
with:
|
||||
version: v3.5.4
|
||||
|
||||
- name: Run chart-releaser
|
||||
uses: ./.github/actions/chart-releaser-action
|
||||
with:
|
||||
charts_dir: helm
|
||||
env:
|
||||
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
CR_RELEASE_NAME_TEMPLATE: "superset-helm-chart-{{ .Version }}"
|
||||
@@ -14,7 +14,6 @@ jobs:
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
# run unit tests in multiple version just for fun
|
||||
python-version: [3.8]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
@@ -33,7 +32,7 @@ jobs:
|
||||
# GitHub action runner's default installations
|
||||
- 15432:5432
|
||||
presto:
|
||||
image: prestosql/presto:339
|
||||
image: starburstdata/presto:350-e.6
|
||||
env:
|
||||
POSTGRES_USER: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
@@ -82,15 +81,14 @@ jobs:
|
||||
- name: Upload code coverage
|
||||
if: steps.check.outcome == 'failure'
|
||||
run: |
|
||||
bash <(curl -s https://codecov.io/bash) -cF python
|
||||
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:
|
||||
# run unit tests in multiple version just for fun
|
||||
python-version: [3.7, 3.8]
|
||||
python-version: [3.8]
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
SUPERSET_CONFIG: tests.superset_test_config
|
||||
@@ -158,4 +156,4 @@ jobs:
|
||||
- name: Upload code coverage
|
||||
if: steps.check.outcome == 'failure'
|
||||
run: |
|
||||
bash <(curl -s https://codecov.io/bash) -cF python
|
||||
bash .github/workflows/codecov.sh -c -F python -F hive
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Python MySQL unit tests
|
||||
name: Python MySQL
|
||||
# Python unit tests
|
||||
name: Python
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
- name: Upload code coverage
|
||||
if: steps.check.outcome == 'failure'
|
||||
run: |
|
||||
bash <(curl -s https://codecov.io/bash) -cF python
|
||||
bash .github/workflows/codecov.sh -c -F python -F mysql
|
||||
|
||||
test-postgres:
|
||||
if: github.event.pull_request.draft == false
|
||||
@@ -134,7 +134,7 @@ jobs:
|
||||
- name: Upload code coverage
|
||||
if: steps.check.outcome == 'failure'
|
||||
run: |
|
||||
bash <(curl -s https://codecov.io/bash) -cF python
|
||||
bash .github/workflows/codecov.sh -c -F python -F postgres
|
||||
|
||||
test-sqlite:
|
||||
if: github.event.pull_request.draft == false
|
||||
@@ -190,4 +190,4 @@ jobs:
|
||||
- name: Upload code coverage
|
||||
if: steps.check.outcome == 'failure'
|
||||
run: |
|
||||
bash <(curl -s https://codecov.io/bash) -cF python
|
||||
bash .github/workflows/codecov.sh -c -F python -F sqlite
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
name: WebSocket server
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- "superset-websocket/**"
|
||||
pull_request:
|
||||
paths:
|
||||
- "superset-websocket/**"
|
||||
|
||||
jobs:
|
||||
app-checks:
|
||||
if: github.event.pull_request.draft == false
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install dependencies
|
||||
working-directory: ./superset-websocket
|
||||
run: npm install
|
||||
- name: lint
|
||||
working-directory: ./superset-websocket
|
||||
run: npm run lint
|
||||
- name: prettier
|
||||
working-directory: ./superset-websocket
|
||||
run: npm run prettier-check
|
||||
- name: unit tests
|
||||
working-directory: ./superset-websocket
|
||||
run: npm run test
|
||||
- name: build
|
||||
working-directory: ./superset-websocket
|
||||
run: npm run build
|
||||
@@ -54,10 +54,12 @@ envpy3
|
||||
env36
|
||||
local_config.py
|
||||
/superset_config.py
|
||||
/superset_text.yml
|
||||
superset.egg-info/
|
||||
superset/bin/supersetc
|
||||
tmp
|
||||
rat-results.txt
|
||||
superset/app/
|
||||
|
||||
# Node.js, webpack artifacts
|
||||
*.entry.js
|
||||
|
||||
@@ -30,3 +30,12 @@
|
||||
[submodule ".github/actions/comment-on-pr"]
|
||||
path = .github/actions/comment-on-pr
|
||||
url = https://github.com/unsplash/comment-on-pr
|
||||
[submodule ".github/actions/chart-testing-action"]
|
||||
path = .github/actions/chart-testing-action
|
||||
url = https://github.com/helm/chart-testing-action
|
||||
[submodule ".github/actions/chart-releaser-action"]
|
||||
path = .github/actions/chart-releaser-action
|
||||
url = https://github.com/helm/chart-releaser-action
|
||||
[submodule ".github/actions/github-action-push-to-another-repository"]
|
||||
path = .github/actions/github-action-push-to-another-repository
|
||||
url = https://github.com/cpina/github-action-push-to-another-repository
|
||||
|
||||
@@ -81,7 +81,7 @@ confidence=
|
||||
# --enable=similarities". If you want to run only the classes checker, but have
|
||||
# no Warning level messages displayed, use"--disable=all --enable=classes
|
||||
# --disable=W"
|
||||
disable=long-builtin,dict-view-method,intern-builtin,suppressed-message,no-absolute-import,unpacking-in-except,apply-builtin,delslice-method,indexing-exception,old-raise-syntax,print-statement,cmp-builtin,reduce-builtin,useless-suppression,coerce-method,input-builtin,cmp-method,raw_input-builtin,nonzero-method,backtick,basestring-builtin,setslice-method,reload-builtin,oct-method,map-builtin-not-iterating,execfile-builtin,old-octal-literal,zip-builtin-not-iterating,buffer-builtin,getslice-method,metaclass-assignment,xrange-builtin,long-suffix,round-builtin,range-builtin-not-iterating,next-method-called,parameter-unpacking,unicode-builtin,unichr-builtin,import-star-module-level,raising-string,filter-builtin-not-iterating,using-cmp-argument,coerce-builtin,file-builtin,old-division,hex-method,missing-docstring,too-many-lines,ungrouped-imports,import-outside-toplevel,raise-missing-from,super-with-arguments,bad-option-value
|
||||
disable=long-builtin,dict-view-method,intern-builtin,suppressed-message,no-absolute-import,unpacking-in-except,apply-builtin,delslice-method,indexing-exception,old-raise-syntax,print-statement,cmp-builtin,reduce-builtin,useless-suppression,coerce-method,input-builtin,cmp-method,raw_input-builtin,nonzero-method,backtick,basestring-builtin,setslice-method,reload-builtin,oct-method,map-builtin-not-iterating,execfile-builtin,old-octal-literal,zip-builtin-not-iterating,buffer-builtin,getslice-method,metaclass-assignment,xrange-builtin,long-suffix,round-builtin,range-builtin-not-iterating,next-method-called,parameter-unpacking,unicode-builtin,unichr-builtin,import-star-module-level,raising-string,filter-builtin-not-iterating,using-cmp-argument,coerce-builtin,file-builtin,old-division,hex-method,missing-docstring,too-many-lines,ungrouped-imports,import-outside-toplevel,raise-missing-from,super-with-arguments,bad-option-value,too-few-public-methods
|
||||
|
||||
|
||||
[REPORTS]
|
||||
|
||||
+825
@@ -18,6 +18,831 @@ under the License.
|
||||
-->
|
||||
## Change Log
|
||||
|
||||
### 1.2 (Tue May 11 09:05:39 2021 -0700)
|
||||
**Database Migrations**
|
||||
- [#14446](https://github.com/apache/superset/pull/14446) fix(native-filters): add migration to update metadata (@villebro)
|
||||
- [#14234](https://github.com/apache/superset/pull/14234) feat: Adding limiting_factor column to Query model (@AAfghahi)
|
||||
- [#14109](https://github.com/apache/superset/pull/14109) feat: Adding encrypted field factory (@craig-rueda)
|
||||
- [#13828](https://github.com/apache/superset/pull/13828) feat(alert/report): chart as csv format attachment for email and slack (@lilykuang)
|
||||
- [#13983](https://github.com/apache/superset/pull/13983) refactor(native-filters): update dataMask and ExtraFormData schema (@simcha90)
|
||||
- [#14063](https://github.com/apache/superset/pull/14063) fix(country-map): update geojson and control layout (@ktmud)
|
||||
- [#13980](https://github.com/apache/superset/pull/13980) fix: Issue 13956 (@john-bodley)
|
||||
- [#13752](https://github.com/apache/superset/pull/13752) feat(alerts & reports): Easier to read execution logs (@jfrag1)
|
||||
- [#13769](https://github.com/apache/superset/pull/13769) fix(dashboard): rename native filter configuration property (@villebro)
|
||||
- [#13603](https://github.com/apache/superset/pull/13603) fix: default when adding tab_state.hide_left_bar (@betodealmeida)
|
||||
- [#13493](https://github.com/apache/superset/pull/13493) fix: merge 67da9ef1ef9c and 1412ec1e5a7b migrations (@hughhhh)
|
||||
- [#13288](https://github.com/apache/superset/pull/13288) fix(sqllab): per-tab hide left bar (@betodealmeida)
|
||||
|
||||
**Features**
|
||||
- [#14590](https://github.com/apache/superset/pull/14590) feat(native-filters): add sort metric to select (@villebro)
|
||||
- [#14519](https://github.com/apache/superset/pull/14519) feat(dremio): implement convert_dttm method (@villebro)
|
||||
- [#14461](https://github.com/apache/superset/pull/14461) feat(native-filters): Auto apply changes in FiltersConfigModal (@simcha90)
|
||||
- [#13521](https://github.com/apache/superset/pull/13521) feat: Logic added to limiting factor column in Query model (@AAfghahi)
|
||||
- [#14357](https://github.com/apache/superset/pull/14357) feat: Add etag caching to dashboard APIs (@etr2460)
|
||||
- [#14318](https://github.com/apache/superset/pull/14318) feat: Dynamic imports for the Icons component (@geido)
|
||||
- [#14398](https://github.com/apache/superset/pull/14398) feat: Support env vars configuration for WebSocket server (@benjreinhart)
|
||||
- [#14261](https://github.com/apache/superset/pull/14261) feat(native-filters): Show/Hide filter bar by metdata ff (@simcha90)
|
||||
- [#14256](https://github.com/apache/superset/pull/14256) feat: Setup `supersetText` configuration to overwrite errors (@hughhhh)
|
||||
- [#14346](https://github.com/apache/superset/pull/14346) feat(native-filters): add optional sort metric to select filter (@villebro)
|
||||
- [#14375](https://github.com/apache/superset/pull/14375) feat(native-filters): add refresh button to default value picker (@villebro)
|
||||
- [#14374](https://github.com/apache/superset/pull/14374) feat(native-filters): Use datasets in dashboard as default options for native filters (@kgabryje)
|
||||
- [#14313](https://github.com/apache/superset/pull/14313) feat(native-filters): Implement adhoc filters and time picker in Range and Select native filters (@kgabryje)
|
||||
- [#14363](https://github.com/apache/superset/pull/14363) feat: update default cron settings for new alerts and reports (@samtfm)
|
||||
- [#14235](https://github.com/apache/superset/pull/14235) feat(alert/report): update content format radio buttons (@lilykuang)
|
||||
- [#14340](https://github.com/apache/superset/pull/14340) feat(filter-box): sort by metric on backend (@villebro)
|
||||
- [#14314](https://github.com/apache/superset/pull/14314) feat(native-filters): add option to create value in select filter (@villebro)
|
||||
- [#14208](https://github.com/apache/superset/pull/14208) feat: add endpoint to fetch available DBs (@betodealmeida)
|
||||
- [#14312](https://github.com/apache/superset/pull/14312) feat(native-filters): add tooltip to control values (@villebro)
|
||||
- [#14267](https://github.com/apache/superset/pull/14267) feat: add alerts & reports to docker compose (@dpgaspar)
|
||||
- [#14250](https://github.com/apache/superset/pull/14250) feat: catch errors on do_ping (@betodealmeida)
|
||||
- [#14092](https://github.com/apache/superset/pull/14092) feat: restyle database modal (@eschutho)
|
||||
- [#14217](https://github.com/apache/superset/pull/14217) feat(native-filters): select group by support (@amitmiran137)
|
||||
- [#14204](https://github.com/apache/superset/pull/14204) feat: improve engine spec discoverability (@betodealmeida)
|
||||
- [#14122](https://github.com/apache/superset/pull/14122) feat: TrinoEngineSpec.adjust_database_uri (@dungdm93)
|
||||
- [#14172](https://github.com/apache/superset/pull/14172) feat: error messages for Presto connections (@betodealmeida)
|
||||
- [#14171](https://github.com/apache/superset/pull/14171) feat: error messages when connecting to mssql (@AAfghahi)
|
||||
- [#14163](https://github.com/apache/superset/pull/14163) feat: publish superset helm chart (@jawabuu)
|
||||
- [#14197](https://github.com/apache/superset/pull/14197) feat(viz): add mixed timeseries and radar chart (@villebro)
|
||||
- [#14187](https://github.com/apache/superset/pull/14187) feat(explore): Enable the new pivot table (@kgabryje)
|
||||
- [#13561](https://github.com/apache/superset/pull/13561) feat: script to benchmark DB migrations (@betodealmeida)
|
||||
- [#14110](https://github.com/apache/superset/pull/14110) feat: Add health endpoint to WebSocket server (@benjreinhart)
|
||||
- [#14146](https://github.com/apache/superset/pull/14146) feat: invalid DB name error messages (MySQL/Postgres/Redshift) (@AAfghahi)
|
||||
- [#14091](https://github.com/apache/superset/pull/14091) feat: FE: Import for Queries II (@lyndsiWilliams)
|
||||
- [#14093](https://github.com/apache/superset/pull/14093) feat: error messages when connecting to MSSQL (@betodealmeida)
|
||||
- [#14072](https://github.com/apache/superset/pull/14072) feat: add Echarts gauge chart (@krsnik93)
|
||||
- [#14111](https://github.com/apache/superset/pull/14111) feat: invalid hostname and password error messages (Redshift) (@AAfghahi)
|
||||
- [#14089](https://github.com/apache/superset/pull/14089) feat: invalid hostname and password error messages (MySQL) (@AAfghahi)
|
||||
- [#13992](https://github.com/apache/superset/pull/13992) feat(dashboard_rbac): provide data access based on dashboard access (@amitmiran137)
|
||||
- [#14076](https://github.com/apache/superset/pull/14076) feat(can_share): can share chart and dashboard (@amitmiran137)
|
||||
- [#14038](https://github.com/apache/superset/pull/14038) feat: invalid password error message (Postgres) (@betodealmeida)
|
||||
- [#13740](https://github.com/apache/superset/pull/13740) feat: Implement Celery SoftTimeLimit handling (@lilykuang)
|
||||
- [#13862](https://github.com/apache/superset/pull/13862) feat: only send alert error emails to owners of the alert (@samtfm)
|
||||
- [#13827](https://github.com/apache/superset/pull/13827) feat: add descriptions to report emails (@samtfm)
|
||||
- [#13726](https://github.com/apache/superset/pull/13726) feat(native-filters): Add default first value to select filter (@simcha90)
|
||||
- [#14007](https://github.com/apache/superset/pull/14007) feat: Make async query JWT cookie domain configurable (@benjreinhart)
|
||||
- [#14040](https://github.com/apache/superset/pull/14040) feat: handle chart/data API errors (@etr2460)
|
||||
- [#14030](https://github.com/apache/superset/pull/14030) feat(helm): add pod and deployment annotations to template (@rasta-rocket)
|
||||
- [#13997](https://github.com/apache/superset/pull/13997) feat: add extract_errors to Postgres (@betodealmeida)
|
||||
- [#13893](https://github.com/apache/superset/pull/13893) feat: create backend routes and API for importing saved queries (@AAfghahi)
|
||||
- [#11498](https://github.com/apache/superset/pull/11498) feat(SIP-39): Websocket sidecar app (@robdiciuccio)
|
||||
- [#14008](https://github.com/apache/superset/pull/14008) feat: Support feature flag overrides in ephemeral test envs (@robdiciuccio)
|
||||
- [#13981](https://github.com/apache/superset/pull/13981) feat: FE: Export for Queries II (@lyndsiWilliams)
|
||||
- [#13960](https://github.com/apache/superset/pull/13960) feat: initial work to make v1 API compatible with SIP-40 and SIP-41 (@betodealmeida)
|
||||
- [#13758](https://github.com/apache/superset/pull/13758) feat(explore): adhoc column formatting for Table chart (@ktmud)
|
||||
- [#13894](https://github.com/apache/superset/pull/13894) feat(alert/report): add ALERTS_ATTACH_REPORTS feature flags + feature (@lilykuang)
|
||||
- [#13871](https://github.com/apache/superset/pull/13871) feat: create table with long name (@betodealmeida)
|
||||
- [#13610](https://github.com/apache/superset/pull/13610) feat: added support to configure the default explorer viz (@cccs-jc)
|
||||
- [#13772](https://github.com/apache/superset/pull/13772) feat(rls): enable row level security by default (@villebro)
|
||||
- [#13728](https://github.com/apache/superset/pull/13728) feat: Helm Chart: add extraSecrets config to allow specifying extra secret files (@andreas-eberle)
|
||||
- [#13720](https://github.com/apache/superset/pull/13720) feat: sort time grain configs (@eschutho)
|
||||
- [#13683](https://github.com/apache/superset/pull/13683) feat(homescreen and cards): Toggle thumbnails off or on and feature flag (@pkdotson)
|
||||
- [#13743](https://github.com/apache/superset/pull/13743) feat: use cross-env when running dev-server (@cemremengu)
|
||||
- [#13696](https://github.com/apache/superset/pull/13696) feat: Refactor asyncEvent middleware and add websocket support (@robdiciuccio)
|
||||
- [#12862](https://github.com/apache/superset/pull/12862) feat: Make initial user configurable in helm chart (@andreas-eberle)
|
||||
- [#13662](https://github.com/apache/superset/pull/13662) feat: add 'extra' column to saved_queries GET (@mistercrunch)
|
||||
- [#13687](https://github.com/apache/superset/pull/13687) feat(cross-filter): Cross filter badge (@simcha90)
|
||||
- [#13678](https://github.com/apache/superset/pull/13678) feat(helm): Add optional apt-get install to superset_bootstrap.sh (@danielewood)
|
||||
- [#13622](https://github.com/apache/superset/pull/13622) feat(native-filters): add temporal support to select filter (@villebro)
|
||||
- [#13682](https://github.com/apache/superset/pull/13682) feat: add Databricks DB engine spec (@betodealmeida)
|
||||
- [#13606](https://github.com/apache/superset/pull/13606) feat: add warning metadata to tables and metrics (@etr2460)
|
||||
- [#13601](https://github.com/apache/superset/pull/13601) feat: better error message when adding DBs (@betodealmeida)
|
||||
- [#13625](https://github.com/apache/superset/pull/13625) feat(cross-filters): Add scoping for cross filters (@simcha90)
|
||||
- [#13634](https://github.com/apache/superset/pull/13634) feat(reports): SLACK_API_TOKEN as callable or str (@nytai)
|
||||
- [#13584](https://github.com/apache/superset/pull/13584) feat: add ErrorBoundary to chart controls (@ktmud)
|
||||
- [#13576](https://github.com/apache/superset/pull/13576) feat(filter-set): Filter set edge cases (@simcha90)
|
||||
- [#13598](https://github.com/apache/superset/pull/13598) feat(explore): Drag and drop UX improvements (@kgabryje)
|
||||
- [#13586](https://github.com/apache/superset/pull/13586) feat: add more big data for testing (@betodealmeida)
|
||||
- [#13487](https://github.com/apache/superset/pull/13487) feat: create hooks to redux component (@AAfghahi)
|
||||
- [#13294](https://github.com/apache/superset/pull/13294) feat(explore): Postgres datatype conversion (@nikolagigic)
|
||||
- [#13575](https://github.com/apache/superset/pull/13575) feat: Implement drag and drop for metrics (@kgabryje)
|
||||
- [#13523](https://github.com/apache/superset/pull/13523) feat(dashboard): dashboard/id/datasets endpoint (@suddjian)
|
||||
- [#13448](https://github.com/apache/superset/pull/13448) feat: add option to load big/wide tables (@betodealmeida)
|
||||
- [#13569](https://github.com/apache/superset/pull/13569) feat(native-filters): add sort option to select filter (@villebro)
|
||||
- [#13152](https://github.com/apache/superset/pull/13152) feat: add connector for CrateDB (@srinify)
|
||||
- [#13545](https://github.com/apache/superset/pull/13545) feat(filter-set): Update existing filter set (@simcha90)
|
||||
- [#13529](https://github.com/apache/superset/pull/13529) feat(filter-set): Filter set history (@simcha90)
|
||||
- [#13484](https://github.com/apache/superset/pull/13484) feat(native-filters): add timegrain and column filter (@villebro)
|
||||
- [#13468](https://github.com/apache/superset/pull/13468) feat: add event_logger to test_connection and create_database commands (@hughhhh)
|
||||
- [#13515](https://github.com/apache/superset/pull/13515) feat(filter-set): adding new filters (@simcha90)
|
||||
- [#13507](https://github.com/apache/superset/pull/13507) feat(native-filters): Filter set tabs (@simcha90)
|
||||
- [#13340](https://github.com/apache/superset/pull/13340) feat: Implement drag and drop columns for filters (@kgabryje)
|
||||
- [#13506](https://github.com/apache/superset/pull/13506) feat(native-filters): Update filter bar buttons (@simcha90)
|
||||
- [#13441](https://github.com/apache/superset/pull/13441) feat: refactor on DBEventLogger to allow for context management (@hughhhh)
|
||||
- [#13144](https://github.com/apache/superset/pull/13144) feat: Add error pages (@samtfm)
|
||||
- [#13190](https://github.com/apache/superset/pull/13190) feat: Added Rows Returned (@AAfghahi)
|
||||
- [#13145](https://github.com/apache/superset/pull/13145) feat(dashboard_rbac): manage roles for dashboard (@simcha90)
|
||||
- [#13377](https://github.com/apache/superset/pull/13377) feat(viz): implement time picker on filter box (@zhaoyongjie)
|
||||
- [#13364](https://github.com/apache/superset/pull/13364) feat: add unit test for LimitMethod.FETCH_MANY (@betodealmeida)
|
||||
- [#13210](https://github.com/apache/superset/pull/13210) feat(explore): ColumnSelectControl with drag-and-drop (@zhaoyongjie)
|
||||
- [#13135](https://github.com/apache/superset/pull/13135) feat(reports): send notification on error with grace (@dpgaspar)
|
||||
|
||||
**Fixes**
|
||||
- [#14561](https://github.com/apache/superset/pull/14561) fix: select country in examples chart (@betodealmeida)
|
||||
- [#14587](https://github.com/apache/superset/pull/14587) fix: dashboard side actions (@pkdotson)
|
||||
- [#14526](https://github.com/apache/superset/pull/14526) fix(chart-data): handle url_params in csv export and native filters (@villebro)
|
||||
- [#14509](https://github.com/apache/superset/pull/14509) fix: parameterize titles correctly (@suddjian)
|
||||
- [#14358](https://github.com/apache/superset/pull/14358) fix: SQL Statement on QUERY_LOGGER prints none to log (@cccs-rc)
|
||||
- [#14483](https://github.com/apache/superset/pull/14483) fix(annotations): pass force param to annotation request (@villebro)
|
||||
- [#14438](https://github.com/apache/superset/pull/14438) fix(viz): bump superset-ui to fix bugs in table and graph chart (@ktmud)
|
||||
- [#14426](https://github.com/apache/superset/pull/14426) fix(native-filters): fix filter scope error (@villebro)
|
||||
- [#14372](https://github.com/apache/superset/pull/14372) fix: SQLLab role permissions (@dpgaspar)
|
||||
- [#14409](https://github.com/apache/superset/pull/14409) fix(native-filters): always show filters without dataset (@villebro)
|
||||
- [#14369](https://github.com/apache/superset/pull/14369) fix: error getting partitionQuery from table.partition (@eriendeng)
|
||||
- [#14401](https://github.com/apache/superset/pull/14401) fix(native-filters): default value not populated on second opening (@villebro)
|
||||
- [#14291](https://github.com/apache/superset/pull/14291) fix: Fix unintended cache misses with async queries (@benjreinhart)
|
||||
- [#14390](https://github.com/apache/superset/pull/14390) fix(sqllab): fix error due to anonymous user (@villebro)
|
||||
- [#14385](https://github.com/apache/superset/pull/14385) fix(native-filters): force update control value on change (@villebro)
|
||||
- [#14387](https://github.com/apache/superset/pull/14387) fix(native-filters): fix lint (@simcha90)
|
||||
- [#14362](https://github.com/apache/superset/pull/14362) fix(emotion): add separate namespace for menu app (@nytai)
|
||||
- [#14370](https://github.com/apache/superset/pull/14370) fix(native-filters): Update filter saving (@simcha90)
|
||||
- [#14317](https://github.com/apache/superset/pull/14317) fix: Cleanup serialization and hashing code (@benjreinhart)
|
||||
- [#14338](https://github.com/apache/superset/pull/14338) fix: pybabel extract fails (@bungoume)
|
||||
- [#14347](https://github.com/apache/superset/pull/14347) fix: flaky test for alerts and reports (@dpgaspar)
|
||||
- [#14353](https://github.com/apache/superset/pull/14353) fix(native-filters): allowClear only when required not checked (@villebro)
|
||||
- [#14287](https://github.com/apache/superset/pull/14287) fix: Make g.user attribute access safe for public users (@robdiciuccio)
|
||||
- [#14334](https://github.com/apache/superset/pull/14334) fix(native-filters): Fix indicators (@simcha90)
|
||||
- [#14332](https://github.com/apache/superset/pull/14332) fix(native-filters): Fix first loading of charts (@simcha90)
|
||||
- [#14240](https://github.com/apache/superset/pull/14240) fix(hive): Use parquet rather than textfile when uploading CSV files to Hive (@john-bodley)
|
||||
- [#14306](https://github.com/apache/superset/pull/14306) fix(dashboard): Add caching for dashboard datasets (@suddjian)
|
||||
- [#14255](https://github.com/apache/superset/pull/14255) fix(hive): Update CSV to Hive upload prefix (@john-bodley)
|
||||
- [#14252](https://github.com/apache/superset/pull/14252) fix: SHOW FUNCTIONS for Databricks (@betodealmeida)
|
||||
- [#14319](https://github.com/apache/superset/pull/14319) fix: unbreak CI (@etr2460)
|
||||
- [#13921](https://github.com/apache/superset/pull/13921) fix: new import/export CLI (@betodealmeida)
|
||||
- [#14084](https://github.com/apache/superset/pull/14084) fix: custom TimeRange can not input value (@zhaoyongjie)
|
||||
- [#14297](https://github.com/apache/superset/pull/14297) fix(sqla): timeseries limit not applied when using columns (@villebro)
|
||||
- [#14295](https://github.com/apache/superset/pull/14295) fix(db2): change engine name and add legacy alias (@villebro)
|
||||
- [#14207](https://github.com/apache/superset/pull/14207) fix(dashboard): draft dashboards should be viewable (@ktmud)
|
||||
- [#14194](https://github.com/apache/superset/pull/14194) fix(explore): CUSTOM SQL tab should automatically update (@stephenLYZ)
|
||||
- [#14258](https://github.com/apache/superset/pull/14258) fix: incorrect module reference(Tooltip) (@zhaoyongjie)
|
||||
- [#14192](https://github.com/apache/superset/pull/14192) fix: Center each import icon and add a tooltip II (@lyndsiWilliams)
|
||||
- [#14147](https://github.com/apache/superset/pull/14147) fix: Handle bad permission errors for bigquery test connections (@hughhhh)
|
||||
- [#14244](https://github.com/apache/superset/pull/14244) fix(native-filters): merge_extra_form_data extras processing (@villebro)
|
||||
- [#14243](https://github.com/apache/superset/pull/14243) fix(explore): Filter edit popover not opening in DnD mode (@kgabryje)
|
||||
- [#14218](https://github.com/apache/superset/pull/14218) fix(native-filters): fix remove native filters (@simcha90)
|
||||
- [#13830](https://github.com/apache/superset/pull/13830) fix: Use utils.json_iso_dttm_ser to dump jsons when async query execution (@cabo40)
|
||||
- [#14220](https://github.com/apache/superset/pull/14220) fix(cross-filters): Fix missed metadata (@simcha90)
|
||||
- [#14170](https://github.com/apache/superset/pull/14170) fix: Switching to local codecov script (@craig-rueda)
|
||||
- [#14180](https://github.com/apache/superset/pull/14180) fix: Add extra requires for shillelagh (@etr2460)
|
||||
- [#14191](https://github.com/apache/superset/pull/14191) fix(viz): time shift read-only error (@villebro)
|
||||
- [#14129](https://github.com/apache/superset/pull/14129) fix(dashboard): filter set hydration not working (@villebro)
|
||||
- [#14140](https://github.com/apache/superset/pull/14140) fix: QueryPane horizontal scroll (@AAfghahi)
|
||||
- [#14148](https://github.com/apache/superset/pull/14148) fix(dashboard): incorrect perm for users with multiple roles (@ktmud)
|
||||
- [#14113](https://github.com/apache/superset/pull/14113) fix: add missing __init__.py (@betodealmeida)
|
||||
- [#14099](https://github.com/apache/superset/pull/14099) fix(SPA): get permission function (@simcha90)
|
||||
- [#14086](https://github.com/apache/superset/pull/14086) fix: Fixed saved query export (@lyndsiWilliams)
|
||||
- [#14057](https://github.com/apache/superset/pull/14057) fix: logs table - user_id is NULL (@hughhhh)
|
||||
- [#14095](https://github.com/apache/superset/pull/14095) fix(sqla): labels_expected contains mutated label (@villebro)
|
||||
- [#14074](https://github.com/apache/superset/pull/14074) fix: unable to apply logging format (@zhaoyongjie)
|
||||
- [#13906](https://github.com/apache/superset/pull/13906) fix(listview): update listview feature flag (@pkdotson)
|
||||
- [#14082](https://github.com/apache/superset/pull/14082) fix: flacky test in test_update_dataset_item_w_override_columns (@hughhhh)
|
||||
- [#14046](https://github.com/apache/superset/pull/14046) fix(cross-filters): Make chart emitting cross-filter exclude itself from filtering (@kgabryje)
|
||||
- [#14081](https://github.com/apache/superset/pull/14081) fix(cross-filters): fix bug when remove chart not removing it's related cross filter data (@simcha90)
|
||||
- [#14036](https://github.com/apache/superset/pull/14036) fix: add exception to catch session not having JWT (@hughhhh)
|
||||
- [#14031](https://github.com/apache/superset/pull/14031) fix: Use consistent chart value (@thomasv314)
|
||||
- [#13974](https://github.com/apache/superset/pull/13974) fix: Use superset generic db to catch external_metadata queries (@hughhhh)
|
||||
- [#14045](https://github.com/apache/superset/pull/14045) fix(viz): bump superset-ui 0.17.30 (@villebro)
|
||||
- [#14039](https://github.com/apache/superset/pull/14039) fix: broken port-forward instructions (@caleb15)
|
||||
- [#14009](https://github.com/apache/superset/pull/14009) fix: use dynamic time_grains for schema (@eschutho)
|
||||
- [#13998](https://github.com/apache/superset/pull/13998) fix: execution log crashes for logs with no uuid (@jfrag1)
|
||||
- [#13911](https://github.com/apache/superset/pull/13911) fix: working timeout with celery kill and logic fix (@dpgaspar)
|
||||
- [#14014](https://github.com/apache/superset/pull/14014) fix(sqla): apply sqla type on calculated columns (@villebro)
|
||||
- [#13969](https://github.com/apache/superset/pull/13969) fix: annotation modal dateRangePicker saved invalid value (@zhaoyongjie)
|
||||
- [#13987](https://github.com/apache/superset/pull/13987) fix: Pie chart not displayed in viz type selection (@zhaoyongjie)
|
||||
- [#13979](https://github.com/apache/superset/pull/13979) fix: import dataset/dashboard empty keys (@betodealmeida)
|
||||
- [#13801](https://github.com/apache/superset/pull/13801) fix(explore): strip semicolons in virtual table SQL (@pkdotson)
|
||||
- [#13972](https://github.com/apache/superset/pull/13972) fix: Data table z index in sql Editor (@AAfghahi)
|
||||
- [#13897](https://github.com/apache/superset/pull/13897) fix: updates load_examples to load-examples (@alexandersimoes)
|
||||
- [#13955](https://github.com/apache/superset/pull/13955) fix: null exception from adhoc metric popover (@graceguo-supercat)
|
||||
- [#13936](https://github.com/apache/superset/pull/13936) fix: use the right variable for Celery results in Redis (@octaviancorlade)
|
||||
- [#13858](https://github.com/apache/superset/pull/13858) fix: Floating Menu in SQL Left Bar (@AAfghahi)
|
||||
- [#13946](https://github.com/apache/superset/pull/13946) fix: SQL -> Explore Overwrite flow (@hughhhh)
|
||||
- [#13737](https://github.com/apache/superset/pull/13737) fix: log exceptions for thumbnail generation as warnings (@samtfm)
|
||||
- [#13945](https://github.com/apache/superset/pull/13945) fix(colors): fix color schemes (@simcha90)
|
||||
- [#13927](https://github.com/apache/superset/pull/13927) fix: trigger collapse with onchange (@eschutho)
|
||||
- [#13926](https://github.com/apache/superset/pull/13926) fix: enable installing docker/requirements-local.txt in docker-compos… (@nytai)
|
||||
- [#13822](https://github.com/apache/superset/pull/13822) fix: adjusted tab height (@AAfghahi)
|
||||
- [#13917](https://github.com/apache/superset/pull/13917) fix: do not run containers as root by default in Helm chart (@megakoresh)
|
||||
- [#13739](https://github.com/apache/superset/pull/13739) fix(sqla-query): order by aggregations in Presto and Hive (@ktmud)
|
||||
- [#13852](https://github.com/apache/superset/pull/13852) fix(dependency): Pin pystan after breaking prophet install (@EBoisseauSierra)
|
||||
- [#13905](https://github.com/apache/superset/pull/13905) fix: consistent left margin for dashboard layout. (@rusackas)
|
||||
- [#13901](https://github.com/apache/superset/pull/13901) fix: Revert "fix: select table overlay" (@etr2460)
|
||||
- [#13878](https://github.com/apache/superset/pull/13878) fix(#13378): Ensure g.user is set for impersonation (@benjreinhart)
|
||||
- [#13859](https://github.com/apache/superset/pull/13859) fix: Check for permissions in FilterBox (@etr2460)
|
||||
- [#13868](https://github.com/apache/superset/pull/13868) fix: change status code for generic errors to 400 (@hughhhh)
|
||||
- [#13800](https://github.com/apache/superset/pull/13800) fix: allow spaces in DB names (@betodealmeida)
|
||||
- [#13749](https://github.com/apache/superset/pull/13749) fix: Disallows negative options remaining in SelectControl (@michael-s-molina)
|
||||
- [#13837](https://github.com/apache/superset/pull/13837) fix(native-filters): add global async query support to native filters (@villebro)
|
||||
- [#13826](https://github.com/apache/superset/pull/13826) fix(errors): Downgrade error on stop query to a warning (@willbarrett)
|
||||
- [#13718](https://github.com/apache/superset/pull/13718) fix(alerts and reports): Unify timestamp format on execution log view (@jfrag1)
|
||||
- [#13841](https://github.com/apache/superset/pull/13841) fix(sqllab): warning message when displayed rows limited (@zuzana-vej)
|
||||
- [#13794](https://github.com/apache/superset/pull/13794) fix(native-filters): improve loading styles for filter component (@villebro)
|
||||
- [#13825](https://github.com/apache/superset/pull/13825) fix(cypress): avoid referencing detached dom nodes (@suddjian)
|
||||
- [#13694](https://github.com/apache/superset/pull/13694) fix: select table overlay (@AAfghahi)
|
||||
- [#13780](https://github.com/apache/superset/pull/13780) fix: restart superset container in test script (@benjreinhart)
|
||||
- [#13790](https://github.com/apache/superset/pull/13790) fix: bad copy-and-paste in API spec (@betodealmeida)
|
||||
- [#13566](https://github.com/apache/superset/pull/13566) fix(explore): make horizontal scroll appears in data panel (@stephenLYZ)
|
||||
- [#13756](https://github.com/apache/superset/pull/13756) fix(CI): use Presto docker image from starburst (@ktmud)
|
||||
- [#13652](https://github.com/apache/superset/pull/13652) fix(datasets): log create exceptions as warning (@nytai)
|
||||
- [#13704](https://github.com/apache/superset/pull/13704) fix(cross-filters): only apply filters if ff is set (@villebro)
|
||||
- [#13695](https://github.com/apache/superset/pull/13695) fix: dashboard filter scope bug (@graceguo-supercat)
|
||||
- [#13703](https://github.com/apache/superset/pull/13703) fix(cross-filters): expand relevant indicator sections (@villebro)
|
||||
- [#13624](https://github.com/apache/superset/pull/13624) fix: data column in SQL lab left panel open by default (@AAfghahi)
|
||||
- [#13688](https://github.com/apache/superset/pull/13688) fix(native-filters): fix removing native filter (@simcha90)
|
||||
- [#13488](https://github.com/apache/superset/pull/13488) fix: allow option to generate new query (@eschutho)
|
||||
- [#13691](https://github.com/apache/superset/pull/13691) fix(dashboard): missing parents in directPathToFilter (@villebro)
|
||||
- [#13692](https://github.com/apache/superset/pull/13692) fix(cross-filters): add a control panel to range filter (@villebro)
|
||||
- [#13679](https://github.com/apache/superset/pull/13679) fix: use FeatureFlags in @superset-ui/core (@ktmud)
|
||||
- [#13681](https://github.com/apache/superset/pull/13681) fix: clean up incorrect usage of TypeScript type in PropTypes (@ktmud)
|
||||
- [#13665](https://github.com/apache/superset/pull/13665) fix(cross-filter): fix scheme py (@simcha90)
|
||||
- [#13621](https://github.com/apache/superset/pull/13621) fix(explore): Add int and bool regex pattern (@nikolagigic)
|
||||
- [#13657](https://github.com/apache/superset/pull/13657) fix: 'Run in SQL Lab' redirect bug (@mistercrunch)
|
||||
- [#13434](https://github.com/apache/superset/pull/13434) fix(query): order by adhoc metrics should trigger group by (@ktmud)
|
||||
- [#13636](https://github.com/apache/superset/pull/13636) fix(sqllab): Table name and schema are encoded twice during fetching table metadata on SQL Lab page. (@didva)
|
||||
- [#13655](https://github.com/apache/superset/pull/13655) fix: Slack dashboard has stale charts (@betodealmeida)
|
||||
- [#13642](https://github.com/apache/superset/pull/13642) fix: bump FAB to 3.2.1, SQLAlchemy fix (@dpgaspar)
|
||||
- [#13608](https://github.com/apache/superset/pull/13608) fix: Add SASL dependency module (@danielewood)
|
||||
- [#13463](https://github.com/apache/superset/pull/13463) fix(alert/report): add notification method in alert report modal (@lilykuang)
|
||||
- [#13585](https://github.com/apache/superset/pull/13585) fix: AntD select dropdown scroll issue (@lilykuang)
|
||||
- [#13578](https://github.com/apache/superset/pull/13578) fix: better handle datasource exceptions (@dpgaspar)
|
||||
- [#13607](https://github.com/apache/superset/pull/13607) fix: link update for report and old alerts deprecations (@betodealmeida)
|
||||
- [#13626](https://github.com/apache/superset/pull/13626) fix(explore): Dynamic dttm in crate test (@nikolagigic)
|
||||
- [#13537](https://github.com/apache/superset/pull/13537) fix(alert/report): switch message content between chart and dashboard (@lilykuang)
|
||||
- [#13389](https://github.com/apache/superset/pull/13389) fix: delete dataset columns and metrics on the REST API (@dpgaspar)
|
||||
- [#13613](https://github.com/apache/superset/pull/13613) fix(helm): Add missing extraConfigs template volume mapping and fix type error on template. (@danielewood)
|
||||
- [#13563](https://github.com/apache/superset/pull/13563) fix: always pass a string as a value to ace editor (@eschutho)
|
||||
- [#13602](https://github.com/apache/superset/pull/13602) fix: ParsedQuery subselect edge case (@etr2460)
|
||||
- [#13570](https://github.com/apache/superset/pull/13570) fix: UI port in dockerfile set to same port in config (@iercan)
|
||||
- [#13496](https://github.com/apache/superset/pull/13496) fix: `IS NULL` filter operator for numeric columns (@ktmud)
|
||||
- [#13546](https://github.com/apache/superset/pull/13546) fix(native-filters): fix initial filter loading (@simcha90)
|
||||
- [#13505](https://github.com/apache/superset/pull/13505) fix: Prevents KeyError in 13504 by making kwarg explicit (@spookymotion)
|
||||
- [#13436](https://github.com/apache/superset/pull/13436) fix(alerts&reports): add celery soft timeout support (@dpgaspar)
|
||||
- [#13473](https://github.com/apache/superset/pull/13473) fix(explore): make sure sort by metric is not duplicated (@ktmud)
|
||||
- [#13352](https://github.com/apache/superset/pull/13352) fix(dashboard): Get dashboard by slug (@suddjian)
|
||||
- [#13444](https://github.com/apache/superset/pull/13444) fix: API to allow importing old exports (JSON/YAML) (@betodealmeida)
|
||||
- [#13464](https://github.com/apache/superset/pull/13464) fix: SHOW is not DML (@betodealmeida)
|
||||
- [#13469](https://github.com/apache/superset/pull/13469) fix: Remove view in sql lab from druid datasources (@etr2460)
|
||||
- [#13425](https://github.com/apache/superset/pull/13425) fix: Adding v0 import/export fields to dashboard metadata schema (@michellethomas)
|
||||
- [#13424](https://github.com/apache/superset/pull/13424) fix: use semver for badge sort (@eschutho)
|
||||
- [#12341](https://github.com/apache/superset/pull/12341) fix: annotation layer modal err handling (@riahk)
|
||||
- [#13331](https://github.com/apache/superset/pull/13331) fix(query-object): extra time-range-endpoints (@john-bodley)
|
||||
- [#13174](https://github.com/apache/superset/pull/13174) fix: update SQL Lab Buttons to better wording (@AAfghahi)
|
||||
- [#13330](https://github.com/apache/superset/pull/13330) fix: date picker support date unit with singular and plural (@zhaoyongjie)
|
||||
|
||||
**Others**
|
||||
- [#14460](https://github.com/apache/superset/pull/14460) chore: bump table plugin to 0.17.42 (@amitmiran137)
|
||||
- [#14443](https://github.com/apache/superset/pull/14443) perf(native-filters): Load native filters after charts (@simcha90)
|
||||
- [#14408](https://github.com/apache/superset/pull/14408) perf(native-filters): avoid unnecessary reloading of charts (@simcha90)
|
||||
- [#14441](https://github.com/apache/superset/pull/14441) refactor(native-filters): allow cascading only for filter_select (@simcha90)
|
||||
- [#14371](https://github.com/apache/superset/pull/14371) test(maximize-chart): Add tests to maximize chart action (@simcha90)
|
||||
- [#14139](https://github.com/apache/superset/pull/14139) chore: Moves Card to the components folder (@michael-s-molina)
|
||||
- [#14048](https://github.com/apache/superset/pull/14048) refactor: Boostrap to AntD - Tabs (@michael-s-molina)
|
||||
- [#14166](https://github.com/apache/superset/pull/14166) chore: Moves the branding folder to the assets folder (@michael-s-molina)
|
||||
- [#14394](https://github.com/apache/superset/pull/14394) docs: improved clickhouse connection details (@srinify)
|
||||
- [#14321](https://github.com/apache/superset/pull/14321) docs: multiple small fixes around databases (@srinify)
|
||||
- [#14366](https://github.com/apache/superset/pull/14366) refactor(db_engine_specs): Removing top-level import of app (@john-bodley)
|
||||
- [#14219](https://github.com/apache/superset/pull/14219) docs: Update trino connection docs (@aakashnand)
|
||||
- [#14203](https://github.com/apache/superset/pull/14203) chore: Bumping lodash version in Superset (@rusackas)
|
||||
- [#14339](https://github.com/apache/superset/pull/14339) chore: Improve Japanese translation (@bungoume)
|
||||
- [#14342](https://github.com/apache/superset/pull/14342) chore(docker-compose): use dev image for docker-compose-non-dev.yml (@nytai)
|
||||
- [#14136](https://github.com/apache/superset/pull/14136) chore: Moves Tabs to the components folder (@michael-s-molina)
|
||||
- [#14355](https://github.com/apache/superset/pull/14355) chore: bump 0.17.38 (@amitmiran137)
|
||||
- [#14035](https://github.com/apache/superset/pull/14035) refactor(addslicecontainer): move slice container panel from bootstrap panel to ant-d (@pkdotson)
|
||||
- [#14106](https://github.com/apache/superset/pull/14106) refactor: Bootstrap to AntD - Form - iteration 1 (@michael-s-molina)
|
||||
- [#14354](https://github.com/apache/superset/pull/14354) chore: add some basic instrumentation to Node WebSocket server (@benjreinhart)
|
||||
- [#14274](https://github.com/apache/superset/pull/14274) chore: Add Redis password option to helm chart (@robdiciuccio)
|
||||
- [#14350](https://github.com/apache/superset/pull/14350) ci: set remote URL to https and bump sha (@dpgaspar)
|
||||
- [#14331](https://github.com/apache/superset/pull/14331) chore(docs): remove .py from db migrate -m (@amitmiran137)
|
||||
- [#14323](https://github.com/apache/superset/pull/14323) chore(spelling): fixing spelling: `clint` -> `client` (@ChrisCarini)
|
||||
- [#14202](https://github.com/apache/superset/pull/14202) chore: Moves spec files to the src folder - iteration 3 (@michael-s-molina)
|
||||
- [#14201](https://github.com/apache/superset/pull/14201) chore: Moves spec files to the src folder - iteration 2 (@michael-s-molina)
|
||||
- [#14200](https://github.com/apache/superset/pull/14200) chore: Moves spec files to the src folder - iteration 1 (@michael-s-molina)
|
||||
- [#14193](https://github.com/apache/superset/pull/14193) chore: Improves Icons storybook (@michael-s-molina)
|
||||
- [#14304](https://github.com/apache/superset/pull/14304) docs: add publish step (@nytai)
|
||||
- [#14309](https://github.com/apache/superset/pull/14309) refactor: reorganize dateFilterUtils.tx (@zhaoyongjie)
|
||||
- [#14100](https://github.com/apache/superset/pull/14100) refactor: Boostrap to AntD - Row/Col (@michael-s-molina)
|
||||
- [#13970](https://github.com/apache/superset/pull/13970) chore: starter make file (@hughhhh)
|
||||
- [#14123](https://github.com/apache/superset/pull/14123) chore: Moves WarningIconWithTooltip to own folder (@michael-s-molina)
|
||||
- [#14298](https://github.com/apache/superset/pull/14298) chore: SQLLab row limit warning using Alert component (@zuzana-vej)
|
||||
- [#14196](https://github.com/apache/superset/pull/14196) chore: Code cleanup in DatabaseModal (@lyndsiWilliams)
|
||||
- [#14257](https://github.com/apache/superset/pull/14257) chore: WebSocket server improvements (@benjreinhart)
|
||||
- [#14253](https://github.com/apache/superset/pull/14253) chore: bump superset-ui (@etr2460)
|
||||
- [#14126](https://github.com/apache/superset/pull/14126) chore: Moves Dropdown to the components folder (@michael-s-molina)
|
||||
- [#14133](https://github.com/apache/superset/pull/14133) chore: Moves Radio to the components folder (@michael-s-molina)
|
||||
- [#14137](https://github.com/apache/superset/pull/14137) chore: Moves Tooltip to the components folder (@michael-s-molina)
|
||||
- [#14167](https://github.com/apache/superset/pull/14167) chore: Moves the staticPages folder to the assets folder (@michael-s-molina)
|
||||
- [#14228](https://github.com/apache/superset/pull/14228) chore(prophet): bump prophet to 1.0.1 (@villebro)
|
||||
- [#14245](https://github.com/apache/superset/pull/14245) test(native-filters): Filter config modal test (@simcha90)
|
||||
- [#14098](https://github.com/apache/superset/pull/14098) test(native-filters): add integration tests for filter bar (@simcha90)
|
||||
- [#14238](https://github.com/apache/superset/pull/14238) chore: Add Preset code owners for ephemeral test env workflows (@robdiciuccio)
|
||||
- [#14128](https://github.com/apache/superset/pull/14128) chore: Moves InfoTooltip to the components folder (@michael-s-molina)
|
||||
- [#14222](https://github.com/apache/superset/pull/14222) chore: bump package.json (@amitmiran137)
|
||||
- [#14223](https://github.com/apache/superset/pull/14223) docs: add helm repo to kubernetes installation instructions (@jawabuu)
|
||||
- [#14211](https://github.com/apache/superset/pull/14211) ci: use git submodules for Chart Actions (@jawabuu)
|
||||
- [#14124](https://github.com/apache/superset/pull/14124) chore: Moves Collapse to the components folder (@michael-s-molina)
|
||||
- [#14130](https://github.com/apache/superset/pull/14130) chore: Moves Modal to the components folder (@michael-s-molina)
|
||||
- [#14178](https://github.com/apache/superset/pull/14178) chore: type some SQL Lab components (@etr2460)
|
||||
- [#14164](https://github.com/apache/superset/pull/14164) chore: Configures Jest to ignore storybook files (@michael-s-molina)
|
||||
- [#14135](https://github.com/apache/superset/pull/14135) chore: Moves Switch to the components folder (@michael-s-molina)
|
||||
- [#14127](https://github.com/apache/superset/pull/14127) chore: Moves DropdownButton to the components folder (@michael-s-molina)
|
||||
- [#14125](https://github.com/apache/superset/pull/14125) chore: Moves CronPicker to the components folder (@michael-s-molina)
|
||||
- [#14013](https://github.com/apache/superset/pull/14013) chore(toggle thumbnails): use localstorage for toggle (@pkdotson)
|
||||
- [#14169](https://github.com/apache/superset/pull/14169) chore: rename connection errors (@betodealmeida)
|
||||
- [#14090](https://github.com/apache/superset/pull/14090) refactor(userInfo): userinfo panel to styled component (@pkdotson)
|
||||
- [#14152](https://github.com/apache/superset/pull/14152) chore: update RELEASING readme (@lilykuang)
|
||||
- [#13973](https://github.com/apache/superset/pull/13973) test: Add tests for Dashboard Header and HeaderActionsDropdown components (@geido)
|
||||
- [#13393](https://github.com/apache/superset/pull/13393) build(deps): bump urijs from 1.19.4 to 1.19.6 in /superset-frontend (@dependabot[bot])
|
||||
- [#13705](https://github.com/apache/superset/pull/13705) test: Adds tests for the FixedOrMetricControl component (@michael-s-molina)
|
||||
- [#13996](https://github.com/apache/superset/pull/13996) refactor: Bootstrap to AntD - ListGroup (@michael-s-molina)
|
||||
- [#12636](https://github.com/apache/superset/pull/12636) build(deps): bump socket.io from 2.3.0 to 2.4.1 in /docs (@dependabot[bot])
|
||||
- [#13391](https://github.com/apache/superset/pull/13391) build(deps): bump three from 0.68.87 to 0.125.0 in /docs (@dependabot[bot])
|
||||
- [#13874](https://github.com/apache/superset/pull/13874) build(deps): bump y18n from 4.0.0 to 4.0.1 in /docs (@dependabot[bot])
|
||||
- [#13886](https://github.com/apache/superset/pull/13886) build(deps): bump y18n from 4.0.0 to 4.0.1 in /superset-frontend (@dependabot[bot])
|
||||
- [#14088](https://github.com/apache/superset/pull/14088) chore: stop logging `SupersetExceptions` if status < 500 (@hughhhh)
|
||||
- [#13919](https://github.com/apache/superset/pull/13919) test: Adds tests to the UndoRedoKeyListeners component (@michael-s-molina)
|
||||
- [#13951](https://github.com/apache/superset/pull/13951) chore: Adds dataMask reducer to reducerIndex (@michael-s-molina)
|
||||
- [#13916](https://github.com/apache/superset/pull/13916) test: Tests audit for the Dashboard FilterBar (@geido)
|
||||
- [#13989](https://github.com/apache/superset/pull/13989) refactor: Bootstrap to AntD - Slider (@michael-s-molina)
|
||||
- [#13306](https://github.com/apache/superset/pull/13306) chore(spa refactor): refactoring dashboard to use api's instead of bootstrapdata (@pkdotson)
|
||||
- [#13961](https://github.com/apache/superset/pull/13961) docs: details on configuring Docker Compose setup (@alexkreidler)
|
||||
- [#14027](https://github.com/apache/superset/pull/14027) docs: update outdated country map tools instructions (@ktmud)
|
||||
- [#14028](https://github.com/apache/superset/pull/14028) test: FilterSets-utils (@yardz)
|
||||
- [#14033](https://github.com/apache/superset/pull/14033) chore: well component to card component(Updating PR #12200) (@yardz)
|
||||
- [#13975](https://github.com/apache/superset/pull/13975) test: ControlItems (@yardz)
|
||||
- [#13941](https://github.com/apache/superset/pull/13941) test: Tabs (@yardz)
|
||||
- [#13937](https://github.com/apache/superset/pull/13937) test: Tab (@yardz)
|
||||
- [#13888](https://github.com/apache/superset/pull/13888) test: SliceHeader (@yardz)
|
||||
- [#13860](https://github.com/apache/superset/pull/13860) test: ShareMenuItems (@yardz)
|
||||
- [#13991](https://github.com/apache/superset/pull/13991) test: ColumnSelect (@yardz)
|
||||
- [#14025](https://github.com/apache/superset/pull/14025) chore: update docs to allow user to properly load examples (@hughhhh)
|
||||
- [#13458](https://github.com/apache/superset/pull/13458) chore: Moves Fade component into TableElement (@michael-s-molina)
|
||||
- [#13933](https://github.com/apache/superset/pull/13933) test: Adds tests to the CssEditor component (@michael-s-molina)
|
||||
- [#13502](https://github.com/apache/superset/pull/13502) test: Tests and Storybook entry for the IndeterminateCheckbox Component (@geido)
|
||||
- [#13736](https://github.com/apache/superset/pull/13736) test: DataTablesPane (@yardz)
|
||||
- [#13787](https://github.com/apache/superset/pull/13787) test: AdhocMetricEditPopover (@yardz)
|
||||
- [#13501](https://github.com/apache/superset/pull/13501) test: Tests and Storybook entry for the TableView Component (@geido)
|
||||
- [#13984](https://github.com/apache/superset/pull/13984) test: prevent flaky frontend unit test case (@zhaoyongjie)
|
||||
- [#13719](https://github.com/apache/superset/pull/13719) test: exploreUtils (@yardz)
|
||||
- [#13887](https://github.com/apache/superset/pull/13887) test: Adds tests to the filter scope components (@michael-s-molina)
|
||||
- [#13931](https://github.com/apache/superset/pull/13931) test: PropertiesModal (Dashboard) (@yardz)
|
||||
- [#13950](https://github.com/apache/superset/pull/13950) test: Add tests for the Dashboard FilterBar CascadeFilterControl component (@geido)
|
||||
- [#13934](https://github.com/apache/superset/pull/13934) docs: replace deprecated EMAIL_REPORTS_WEBDRIVER with the new WEBDRIVER_TYPE (@octaviancorlade)
|
||||
- [#13953](https://github.com/apache/superset/pull/13953) chore: bump @superset-ui/plugin-chart-table to 0.17.28 (@ktmud)
|
||||
- [#13877](https://github.com/apache/superset/pull/13877) refactor: move CTAS/CVAS field II (@hughhhh)
|
||||
- [#13895](https://github.com/apache/superset/pull/13895) test: SliceHeaderControls (@yardz)
|
||||
- [#13553](https://github.com/apache/superset/pull/13553) chore: Dedicated dir and Storybook for the DatePicker Component (@geido)
|
||||
- [#13818](https://github.com/apache/superset/pull/13818) test: PropertiesModal (@yardz)
|
||||
- [#13875](https://github.com/apache/superset/pull/13875) test: CrossFilterScopingForm (@yardz)
|
||||
- [#13873](https://github.com/apache/superset/pull/13873) test: FilterIndicator (@yardz)
|
||||
- [#13872](https://github.com/apache/superset/pull/13872) test: DetailsPanel (@yardz)
|
||||
- [#13745](https://github.com/apache/superset/pull/13745) test: Enhance tests and directory structure for FilterControl components (@geido)
|
||||
- [#13712](https://github.com/apache/superset/pull/13712) test: Adds tests to the TimeSeriesColumnControl component (@michael-s-molina)
|
||||
- [#13753](https://github.com/apache/superset/pull/13753) test: FilterBoxItemControl (@yardz)
|
||||
- [#13656](https://github.com/apache/superset/pull/13656) test: CollectionControl (@yardz)
|
||||
- [#13482](https://github.com/apache/superset/pull/13482) test: Adds storybook to Dropdown and DropdownButton components (@michael-s-molina)
|
||||
- [#13876](https://github.com/apache/superset/pull/13876) test: CrossFilterScopingModal/utils (@yardz)
|
||||
- [#13939](https://github.com/apache/superset/pull/13939) chore(dashboard): Datasource -> Dataset (@suddjian)
|
||||
- [#13892](https://github.com/apache/superset/pull/13892) test: Adds tests to the PublishedStatus component (@michael-s-molina)
|
||||
- [#13932](https://github.com/apache/superset/pull/13932) chore(dashboard_rbac): bump superset-ui 0.17.27 (@amitmiran137)
|
||||
- [#13548](https://github.com/apache/superset/pull/13548) test: Fixes PropertiesModal_spec (@michael-s-molina)
|
||||
- [#13650](https://github.com/apache/superset/pull/13650) test: Adds tests to dnd controls (@michael-s-molina)
|
||||
- [#13748](https://github.com/apache/superset/pull/13748) test: Adds tests to the AnnotationLayer component (@michael-s-molina)
|
||||
- [#13799](https://github.com/apache/superset/pull/13799) test: Refactor and enhance tests for the Explore DatasourcePanel Component (@geido)
|
||||
- [#13778](https://github.com/apache/superset/pull/13778) test: Tests and dedicated dir for Explore TextControl component (@geido)
|
||||
- [#13750](https://github.com/apache/superset/pull/13750) test: DisplayQueryButton (@yardz)
|
||||
- [#13729](https://github.com/apache/superset/pull/13729) test: Adds tests to the OptionControls component (@michael-s-molina)
|
||||
- [#13605](https://github.com/apache/superset/pull/13605) test: DatasourceControl (@yardz)
|
||||
- [#13896](https://github.com/apache/superset/pull/13896) test: handleScroll (@yardz)
|
||||
- [#13675](https://github.com/apache/superset/pull/13675) test: Adds tests to the CustomFrame component (@michael-s-molina)
|
||||
- [#13664](https://github.com/apache/superset/pull/13664) test: Adds tests to the AdvancedFrame component (@michael-s-molina)
|
||||
- [#13668](https://github.com/apache/superset/pull/13668) test: DataTableControl (@yardz)
|
||||
- [#13477](https://github.com/apache/superset/pull/13477) chore: Removes Select duplication (@michael-s-molina)
|
||||
- [#13813](https://github.com/apache/superset/pull/13813) docs: Documenting how to debug Flask app (@cccs-jc)
|
||||
- [#13457](https://github.com/apache/superset/pull/13457) test: Adds tests and storybook to CertifiedIcon component (@michael-s-molina)
|
||||
- [#13459](https://github.com/apache/superset/pull/13459) chore: Moves CheckboxIcons to Checkbox folder (@michael-s-molina)
|
||||
- [#13462](https://github.com/apache/superset/pull/13462) chore: Removes Popover duplication (@michael-s-molina)
|
||||
- [#13527](https://github.com/apache/superset/pull/13527) build(deps): bump elliptic from 6.5.3 to 6.5.4 in /docs (@dependabot[bot])
|
||||
- [#13855](https://github.com/apache/superset/pull/13855) chore: Update PR template for SIP-59 DB migrations process (@robdiciuccio)
|
||||
- [#13759](https://github.com/apache/superset/pull/13759) chore: Add CODEOWNERS for superset/migrations (@robdiciuccio)
|
||||
- [#13861](https://github.com/apache/superset/pull/13861) docs: fixed a link (@ericmand)
|
||||
- [#13854](https://github.com/apache/superset/pull/13854) chore: Displays row limit warning with the Alert component (@michael-s-molina)
|
||||
- [#13811](https://github.com/apache/superset/pull/13811) chore: add success log whenever a connection is working (@hughhhh)
|
||||
- [#13767](https://github.com/apache/superset/pull/13767) chore(git): ignore app folder under superset (@cemremengu)
|
||||
- [#13784](https://github.com/apache/superset/pull/13784) chore(cypress): Make the e2e tests more behavior-driven (@suddjian)
|
||||
- [#13797](https://github.com/apache/superset/pull/13797) refactor: New schedule query button (@AAfghahi)
|
||||
- [#13547](https://github.com/apache/superset/pull/13547) test: Adds storybook and tests to PopoverDropdown component (@michael-s-molina)
|
||||
- [#13757](https://github.com/apache/superset/pull/13757) chore(CI): dont run Hive tests on Py 3.7 (@ktmud)
|
||||
- [#13638](https://github.com/apache/superset/pull/13638) test: SelectAsyncControl (@yardz)
|
||||
- [#13581](https://github.com/apache/superset/pull/13581) test: DatabaseSelector (@yardz)
|
||||
- [#13534](https://github.com/apache/superset/pull/13534) test: Tests, dedicated directory and Storybook for the ProgressBar component (@geido)
|
||||
- [#13781](https://github.com/apache/superset/pull/13781) docs: update setup instructions (@benjreinhart)
|
||||
- [#13676](https://github.com/apache/superset/pull/13676) refactor: SouthPane into functional component (@AAfghahi)
|
||||
- [#13785](https://github.com/apache/superset/pull/13785) refactor: Revert "refactor: ScheduleQueryButton into functional component (#134… (@hughhhh)
|
||||
- [#13443](https://github.com/apache/superset/pull/13443) refactor: ScheduleQueryButton into functional component (@AAfghahi)
|
||||
- [#13738](https://github.com/apache/superset/pull/13738) chore: Update presto.mdx (@hughhhh)
|
||||
- [#13751](https://github.com/apache/superset/pull/13751) test: changing logger.exception to logger.errors in databases api (@AAfghahi)
|
||||
- [#13770](https://github.com/apache/superset/pull/13770) docs(contributing): fix backend port (@cemremengu)
|
||||
- [#13627](https://github.com/apache/superset/pull/13627) test: DatasourcePanelDragWrapper (@yardz)
|
||||
- [#13722](https://github.com/apache/superset/pull/13722) chore: Improve Korean translation (@kimsehwan96)
|
||||
- [#13500](https://github.com/apache/superset/pull/13500) chore(homepage): separate out api calls to make homepage load more dynamically (@pkdotson)
|
||||
- [#13730](https://github.com/apache/superset/pull/13730) refactor: helm chart: Use stringData instead of data in Secrets and remove manual base64 encoding (@andreas-eberle)
|
||||
- [#13677](https://github.com/apache/superset/pull/13677) build: implement codecov carryforward flags (@jfrag1)
|
||||
- [#13723](https://github.com/apache/superset/pull/13723) refactor(native-filters): refactor filter bar (@simcha90)
|
||||
- [#12932](https://github.com/apache/superset/pull/12932) docs: update helm documentation (@anthcor)
|
||||
- [#13554](https://github.com/apache/superset/pull/13554) test: usePrevious hook (@yardz)
|
||||
- [#13630](https://github.com/apache/superset/pull/13630) refactor: Share sql lab query (@AAfghahi)
|
||||
- [#13555](https://github.com/apache/superset/pull/13555) test: useChangeEffect (@yardz)
|
||||
- [#13658](https://github.com/apache/superset/pull/13658) chore: bump pyyaml to latest (@robdiciuccio)
|
||||
- [#13643](https://github.com/apache/superset/pull/13643) docs: Make suggested changes related to curl use in CONTRIBUTING.md (@slim-patchy)
|
||||
- [#13660](https://github.com/apache/superset/pull/13660) chore(explore): added debounce in DateFilterControl (@zhaoyongjie)
|
||||
- [#13342](https://github.com/apache/superset/pull/13342) chore: improve modal error handling (@lilykuang)
|
||||
- [#13508](https://github.com/apache/superset/pull/13508) test: Tests and dedicated directory for the SupersetResourceSelect Component (@geido)
|
||||
- [#13611](https://github.com/apache/superset/pull/13611) docs: correct sentence (@ErfanMirzapour)
|
||||
- [#13587](https://github.com/apache/superset/pull/13587) chore: create better links for latest release (@eschutho)
|
||||
- [#13596](https://github.com/apache/superset/pull/13596) chore: metric refactor iteration 1 (@zhaoyongjie)
|
||||
- [#13593](https://github.com/apache/superset/pull/13593) chore(explore): bump superset-ui 0.17.19 (@zhaoyongjie)
|
||||
- [#13520](https://github.com/apache/superset/pull/13520) refactor: convert controlUtils to TypeScript (2 of 2) (@ktmud)
|
||||
- [#13549](https://github.com/apache/superset/pull/13549) test: CronPicker (@yardz)
|
||||
- [#13583](https://github.com/apache/superset/pull/13583) test: TableCollection (@yardz)
|
||||
- [#13498](https://github.com/apache/superset/pull/13498) build: check potential db migration conflict for open PRs (@ktmud)
|
||||
- [#13513](https://github.com/apache/superset/pull/13513) test: Tests, dedicated directory and Storybook for the Badge component (@geido)
|
||||
- [#13421](https://github.com/apache/superset/pull/13421) build: ignore Storybook stories in CodeCov (@ktmud)
|
||||
- [#13438](https://github.com/apache/superset/pull/13438) test: Adds tests and storybook to PopoverSection component (@michael-s-molina)
|
||||
- [#13517](https://github.com/apache/superset/pull/13517) test: Adds storybook and tests to AsyncEsmComponent (@michael-s-molina)
|
||||
- [#13516](https://github.com/apache/superset/pull/13516) test: Adds storybook to AlteredSliceTag component (@michael-s-molina)
|
||||
- [#13452](https://github.com/apache/superset/pull/13452) build(test env): Shutdown test environments on PR close (@robdiciuccio)
|
||||
- [#13518](https://github.com/apache/superset/pull/13518) ci: increase page size of GH PR API call (@villebro)
|
||||
- [#13412](https://github.com/apache/superset/pull/13412) test: Adds storybook to ConfirmStatusChange component (@michael-s-molina)
|
||||
- [#13365](https://github.com/apache/superset/pull/13365) docs: add more documentation around python testing and linting (@eschutho)
|
||||
- [#13437](https://github.com/apache/superset/pull/13437) refactor(native-filters): Move `filtersState` to `dataMask` redux root (@simcha90)
|
||||
- [#13454](https://github.com/apache/superset/pull/13454) chore: Moves ChartIcon to own folder (@michael-s-molina)
|
||||
- [#13409](https://github.com/apache/superset/pull/13409) test: Adds tests and storybook to RefreshLabel (@michael-s-molina)
|
||||
- [#13324](https://github.com/apache/superset/pull/13324) chore: Moves ListView test to component's folder (@michael-s-molina)
|
||||
- [#13485](https://github.com/apache/superset/pull/13485) chore: Moves InfoTooltip component to own folder (@michael-s-molina)
|
||||
- [#13479](https://github.com/apache/superset/pull/13479) test: Adds storybook to Switch component (@michael-s-molina)
|
||||
- [#13410](https://github.com/apache/superset/pull/13410) test: Adds storybook to SearchInput component (@michael-s-molina)
|
||||
- [#13460](https://github.com/apache/superset/pull/13460) chore: Moves BootstrapSliderWrapper to own folder (@michael-s-molina)
|
||||
- [#13440](https://github.com/apache/superset/pull/13440) docs: deprecate old alerts and dash/charts reports (@dpgaspar)
|
||||
- [#13361](https://github.com/apache/superset/pull/13361) chore: Migrating dashboard/components/menu from jsx to tsx (@ayanginet)
|
||||
- [#13455](https://github.com/apache/superset/pull/13455) docs: Fix typo in footer (@thinkh)
|
||||
- [#13376](https://github.com/apache/superset/pull/13376) chore: Improve Japanese translation (@tesshy)
|
||||
- [#13417](https://github.com/apache/superset/pull/13417) refactor: add set data mask to build query (@simcha90)
|
||||
- [#13450](https://github.com/apache/superset/pull/13450) chore: disable drag metrics and columns in datasourcePanel (@zhaoyongjie)
|
||||
- [#13411](https://github.com/apache/superset/pull/13411) chore: Moves TableSelector tests to component's folder (@michael-s-molina)
|
||||
- [#13401](https://github.com/apache/superset/pull/13401) refactor: convert controlUtils to TypeScript (1 of 2) (@ktmud)
|
||||
- [#13102](https://github.com/apache/superset/pull/13102) refactor: Query search into functional component (@AAfghahi)
|
||||
- [#13418](https://github.com/apache/superset/pull/13418) chore: Added rockset and firebird (@srinify)
|
||||
- [#13408](https://github.com/apache/superset/pull/13408) chore: Removes unused Hotkeys component (@michael-s-molina)
|
||||
- [#13407](https://github.com/apache/superset/pull/13407) test: Adds storybook to FormRow component (@michael-s-molina)
|
||||
- [#13406](https://github.com/apache/superset/pull/13406) test: Adds storybook to AnchorLink component (@michael-s-molina)
|
||||
- [#13415](https://github.com/apache/superset/pull/13415) test: Adds storybook to IconTooltip component (@michael-s-molina)
|
||||
- [#13362](https://github.com/apache/superset/pull/13362) test: Adds storybook to EditableTitle component (@michael-s-molina)
|
||||
- [#13359](https://github.com/apache/superset/pull/13359) test: Adds tests and storybook to CopyToClipboard component (@michael-s-molina)
|
||||
- [#13358](https://github.com/apache/superset/pull/13358) test: ErrorMessage components tests (@geido)
|
||||
- [#13374](https://github.com/apache/superset/pull/13374) chore: convert chartReducer to TypeScript (@ktmud)
|
||||
- [#13137](https://github.com/apache/superset/pull/13137) refactor(self-trigger): Split native filters state (@simcha90)
|
||||
- [#13367](https://github.com/apache/superset/pull/13367) chore: npm audit fix (@eschutho)
|
||||
- [#13343](https://github.com/apache/superset/pull/13343) test: Adds storybook to Timer component (@michael-s-molina)
|
||||
- [#13338](https://github.com/apache/superset/pull/13338) chore: Moves OnPasteSelect tests to component's folder (@michael-s-molina)
|
||||
- [#13322](https://github.com/apache/superset/pull/13322) chore: Moves FilterableTable test to component's folder (@michael-s-molina)
|
||||
- [#13276](https://github.com/apache/superset/pull/13276) test: ErrorBoundary dedicated directory and tests (@geido)
|
||||
- [#13274](https://github.com/apache/superset/pull/13274) chore: Migrates RefreshChartOverlay into Chart (@michael-s-molina)
|
||||
- [#13273](https://github.com/apache/superset/pull/13273) test: Improves ButtonGroup tests (@michael-s-molina)
|
||||
- [#13375](https://github.com/apache/superset/pull/13375) build: fix codecov informational config (@ktmud)
|
||||
- [#13270](https://github.com/apache/superset/pull/13270) test: FormLabel dedicated directory and tests (@geido)
|
||||
- [#13221](https://github.com/apache/superset/pull/13221) refactor(explore): convert ControlPanelsContainer to typescript (@ktmud)
|
||||
- [#13305](https://github.com/apache/superset/pull/13305) test: Tests for OmniContainer (@yardz)
|
||||
- [#13104](https://github.com/apache/superset/pull/13104) chore: update docs for new alerts and reporting feature (@leocape)
|
||||
- [#13277](https://github.com/apache/superset/pull/13277) test: Pagination component (@yardz)
|
||||
- [#13332](https://github.com/apache/superset/pull/13332) chore: Update OAuth2 configuration guide to match with FlaskAppBuilder (@liamnv)
|
||||
- [#13299](https://github.com/apache/superset/pull/13299) test: Adds tests to TableLoader component (@michael-s-molina)
|
||||
- [#13314](https://github.com/apache/superset/pull/13314) chore: Moves AsyncSelect component and tests to own folder (@michael-s-molina)
|
||||
- [#13302](https://github.com/apache/superset/pull/13302) test: Menu component tests (@geido)
|
||||
- [#13318](https://github.com/apache/superset/pull/13318) test: CacheLabel (@yardz)
|
||||
- [#13320](https://github.com/apache/superset/pull/13320) test: tests for component FaveStar (@yardz)
|
||||
- [#13296](https://github.com/apache/superset/pull/13296) chore: migrating some LESS to Emotions for ResultSet components (@rusackas)
|
||||
- [#13218](https://github.com/apache/superset/pull/13218) refactor: Introduce api resource hooks, fetch owners for chart errors (@suddjian)
|
||||
- [#13319](https://github.com/apache/superset/pull/13319) test: Adds tests to URLShortLinkButton component (@michael-s-molina)
|
||||
- [#13286](https://github.com/apache/superset/pull/13286) test: Tests for DeleteModal component (@yardz)
|
||||
- [#13329](https://github.com/apache/superset/pull/13329) test: optimize codecov config (@ktmud)
|
||||
- [#13323](https://github.com/apache/superset/pull/13323) build: Use redis:latest in docker-compose workflow (@robdiciuccio)
|
||||
- [#12229](https://github.com/apache/superset/pull/12229) refactor: New Icon system with Enhanced Antd Custom Icon (@geido)
|
||||
- [#13189](https://github.com/apache/superset/pull/13189) build: Ephemeral environments for PRs via slash command (@robdiciuccio)
|
||||
|
||||
### 1.1 (Wed Feb 24 12:08:28 2021 +0200)
|
||||
|
||||
**Database Migrations**
|
||||
- [#13111](https://github.com/apache/superset/pull/13111) feat: add Echarts Graph chart (@mayurnewase)
|
||||
- [#13262](https://github.com/apache/superset/pull/13262) fix: migration script message formatting issue (@ktmud)
|
||||
- [#13216](https://github.com/apache/superset/pull/13216) fix: add missing columns (@betodealmeida)
|
||||
- [#12960](https://github.com/apache/superset/pull/12960) fix: Retroactively add granularity param to charts (@etr2460)
|
||||
- [#13052](https://github.com/apache/superset/pull/13052) fix(explore): pie chart label bugs (@villebro)
|
||||
- [#13015](https://github.com/apache/superset/pull/13015) fix: time filter db migration optimization (@ktmud)
|
||||
- [#12950](https://github.com/apache/superset/pull/12950) chore: rename revision to match naming scheme (@etr2460)
|
||||
- [#12680](https://github.com/apache/superset/pull/12680) feat(dashboard_rbac): dashboard lists (@amitmiran137)
|
||||
- [#12552](https://github.com/apache/superset/pull/12552) fix(explore): deprecated x periods pattern in new time picker value (@zhaoyongjie)
|
||||
- [#12336](https://github.com/apache/superset/pull/12336) chore: remove additional incubator references (@amitmiran137)
|
||||
|
||||
**Features**
|
||||
- [#13353](https://github.com/apache/superset/pull/13353) feat: add Firebird DB engine spec (@betodealmeida)
|
||||
- [#13271](https://github.com/apache/superset/pull/13271) feat(chart-data): add rowcount, timegrain and column result types (@villebro)
|
||||
- [#13214](https://github.com/apache/superset/pull/13214) feat(presto): add support for user impersonation (@rijojoseph07)
|
||||
- [#13049](https://github.com/apache/superset/pull/13049) feat: Add sort by for dist bar chart (@maloun96)
|
||||
- [#13057](https://github.com/apache/superset/pull/13057) feat: Add sort by metric for charts with multiple metrics (@maloun96)
|
||||
- [#13182](https://github.com/apache/superset/pull/13182) feat: Move SQLAlchemy url reference to config (@hughhhh)
|
||||
- [#13130](https://github.com/apache/superset/pull/13130) feat(helm): Evaluate configOverrides as templates (@Yann-J)
|
||||
- [#13205](https://github.com/apache/superset/pull/13205) feat(filter-sets): Saving filter sets in metadata (@simcha90)
|
||||
- [#13037](https://github.com/apache/superset/pull/13037) feat: add autocopy functionality to CopyToClipboard (#10328) (@michael-s-molina)
|
||||
- [#13031](https://github.com/apache/superset/pull/13031) feat(filters-set): basic implementation for managing user filter sets (@simcha90)
|
||||
- [#13150](https://github.com/apache/superset/pull/13150) feat(alerts): apply SQL limit to all alerts (@dpgaspar)
|
||||
- [#13116](https://github.com/apache/superset/pull/13116) feat(helm): Helm template for Celery beat (for reporting and alerting) (@Yann-J)
|
||||
- [#13114](https://github.com/apache/superset/pull/13114) feat: Added annotations and loadBalancerIP option in helm service.yaml (@cheunhong)
|
||||
- [#13148](https://github.com/apache/superset/pull/13148) feat(native-filters): enable filter indicator and make datasource optional (@simcha90)
|
||||
- [#12978](https://github.com/apache/superset/pull/12978) feat(dashboard): API to get a dashboard's charts (@suddjian)
|
||||
- [#13105](https://github.com/apache/superset/pull/13105) feat: first step native support Trino (@dungdm93)
|
||||
- [#13058](https://github.com/apache/superset/pull/13058) feat: add sort_by_metric for charts with single metric (@maloun96)
|
||||
- [#13035](https://github.com/apache/superset/pull/13035) feat(dashboard_rbac): add support for related roles (@amitmiran137)
|
||||
- [#13108](https://github.com/apache/superset/pull/13108) feat(native-filters): hide filterBar and toggle icon when in editMode (@amitmiran137)
|
||||
- [#13096](https://github.com/apache/superset/pull/13096) feat: Custom superset_config.py + secret envs (@Yann-J)
|
||||
- [#13005](https://github.com/apache/superset/pull/13005) feat(native-filters): add storybook entry for select filter (@simcha90)
|
||||
- [#12992](https://github.com/apache/superset/pull/12992) feat(native-filters): Time native filter (@simcha90)
|
||||
- [#13056](https://github.com/apache/superset/pull/13056) feat: Force pod restart on config changes (@Yann-J)
|
||||
- [#12662](https://github.com/apache/superset/pull/12662) feat(cross-filters): add cross filters (@simcha90)
|
||||
- [#12918](https://github.com/apache/superset/pull/12918) feat(style): hide dashboard header by url parameter (@simcha90)
|
||||
- [#12602](https://github.com/apache/superset/pull/12602) feat(db engines): add support for Opendistro Elasticsearch (AWS ES) (@dpgaspar)
|
||||
- [#12996](https://github.com/apache/superset/pull/12996) feat: Save datapanel state in local storage (@kgabryje)
|
||||
- [#12865](https://github.com/apache/superset/pull/12865) feat(dashboard_rbac): dashboards API support for roles create/update + roles validation (@amitmiran137)
|
||||
- [#12782](https://github.com/apache/superset/pull/12782) feat: reset metrics on dataset change (@pkdotson)
|
||||
- [#12875](https://github.com/apache/superset/pull/12875) feat(dashboard_rbac): dashboard_view access enforcement (@amitmiran137)
|
||||
- [#12887](https://github.com/apache/superset/pull/12887) feat(time-table): add row limit control for timeseries table (@maloun96)
|
||||
- [#12909](https://github.com/apache/superset/pull/12909) feat: clear search on dataset change (@pkdotson)
|
||||
- [#12840](https://github.com/apache/superset/pull/12840) feat: add separate endpoint to fetch function names for autocomplete (@betodealmeida)
|
||||
- [#12858](https://github.com/apache/superset/pull/12858) feat(style-theme): add support for custom superset themes (@simcha90)
|
||||
- [#12199](https://github.com/apache/superset/pull/12199) feat(native-filters): Add defaultValue for Native filters modal (@simcha90)
|
||||
- [#12663](https://github.com/apache/superset/pull/12663) feat: request ids on API related endpoints (@dpgaspar)
|
||||
- [#12716](https://github.com/apache/superset/pull/12716) feat(native-filters): apply scoping of native filters to dashboard (@simcha90)
|
||||
- [#12609](https://github.com/apache/superset/pull/12609) feat: default timepicker to last week when dataset is changed (@pkdotson)
|
||||
- [#12740](https://github.com/apache/superset/pull/12740) feat: Adding option to set_database_uri CLI command (@craig-rueda)
|
||||
- [#12635](https://github.com/apache/superset/pull/12635) feat: add decorator to guard public APIs (@betodealmeida)
|
||||
- [#12581](https://github.com/apache/superset/pull/12581) feat(bigquery): implement custom minute time grains (@villebro)
|
||||
- [#11720](https://github.com/apache/superset/pull/11720) feat(db-engine-specs): add support for Postgres root cert (@villebro)
|
||||
- [#12415](https://github.com/apache/superset/pull/12415) feat: new Slack dashboard (@betodealmeida)
|
||||
|
||||
**Fixes**
|
||||
- [#13735](https://github.com/apache/superset/pull/13735) fix: Properly escape special characters in CSV output (@benjreinhart)
|
||||
- [#13461](https://github.com/apache/superset/pull/13461) fix: url shortener invalid input (@dpgaspar)
|
||||
- [#13157](https://github.com/apache/superset/pull/13157) fix(alerts&reports): Alerts & Reports will use values from WEBDRIVER_WINDOW option (@iercan)
|
||||
- [#13350](https://github.com/apache/superset/pull/13350) fix(celery): Reset DB connection pools for forked worker processes (@robdiciuccio)
|
||||
- [#13300](https://github.com/apache/superset/pull/13300) fix: exception when saving dash (@amitmiran137)
|
||||
- [#13284](https://github.com/apache/superset/pull/13284) fix(listview): preserve bulk selections when view mode is changed (@nytai)
|
||||
- [#13289](https://github.com/apache/superset/pull/13289) fix(alerts): Handle None on results (@dpgaspar)
|
||||
- [#12937](https://github.com/apache/superset/pull/12937) fix: chart keys in MultiLineViz (@rwspielman)
|
||||
- [#13254](https://github.com/apache/superset/pull/13254) fix: style tweaks for inconsistent button spacing (@rusackas)
|
||||
- [#13291](https://github.com/apache/superset/pull/13291) fix(home): missing key and invalid dates in Recents cards (@ktmud)
|
||||
- [#12926](https://github.com/apache/superset/pull/12926) fix: add alert report timeout limits (@riahk)
|
||||
- [#13283](https://github.com/apache/superset/pull/13283) fix(menu): links that result in 404s (@nytai)
|
||||
- [#13245](https://github.com/apache/superset/pull/13245) fix: bulk select on card view (@lilykuang)
|
||||
- [#13233](https://github.com/apache/superset/pull/13233) fix(viz): calendar heatmap granularity (@maloun96)
|
||||
- [#13186](https://github.com/apache/superset/pull/13186) fix: SqlEditor_spec tests (@michael-s-molina)
|
||||
- [#13222](https://github.com/apache/superset/pull/13222) fix(alert/report): alert modal loading dropdown options (@lilykuang)
|
||||
- [#13122](https://github.com/apache/superset/pull/13122) fix: TimeTable average with nulls calculations (@pavlozt)
|
||||
- [#13181](https://github.com/apache/superset/pull/13181) fix(explore): Fix downloading as image charts which use Mapbox (@kgabryje)
|
||||
- [#13163](https://github.com/apache/superset/pull/13163) fix: Fixing pinot query generation for date format conversion from python datetime format to java simple date format (@fx19880617)
|
||||
- [#13123](https://github.com/apache/superset/pull/13123) fix: add the untranslated text content of Chart page, Sql Editor page and some dashboard label in messages.pot (@cdmikechen)
|
||||
- [#13211](https://github.com/apache/superset/pull/13211) fix(explore): Reset values in TextControl only when datasource changes (@kgabryje)
|
||||
- [#13219](https://github.com/apache/superset/pull/13219) fix: Update display string when sqlalchemy doc config us changed (@hughhhh)
|
||||
- [#13217](https://github.com/apache/superset/pull/13217) fix(native-filters): uncapitalize filter name (@amitmiran137)
|
||||
- [#13160](https://github.com/apache/superset/pull/13160) fix: Grab datasets initially onMount (@hughhhh)
|
||||
- [#13086](https://github.com/apache/superset/pull/13086) fix: accept null groupby in form data for timeseries table viz (@michellethomas)
|
||||
- [#13173](https://github.com/apache/superset/pull/13173) fix(api): apply dashboard filter to get dash charts API (@dpgaspar)
|
||||
- [#13178](https://github.com/apache/superset/pull/13178) fix(cross-filters): apply cross filters for all charts (@simcha90)
|
||||
- [#13141](https://github.com/apache/superset/pull/13141) fix: handle lack of dynamic plugins (@suddjian)
|
||||
- [#13153](https://github.com/apache/superset/pull/13153) fix: engines that don't support comments (@dpgaspar)
|
||||
- [#12977](https://github.com/apache/superset/pull/12977) fix(alert/report): bulk select mode should be deactivated (@lilykuang)
|
||||
- [#13180](https://github.com/apache/superset/pull/13180) fix(sqllab): menu link results in 404 (@nytai)
|
||||
- [#13164](https://github.com/apache/superset/pull/13164) fix(native-filters): Apply range filter (@simcha90)
|
||||
- [#13165](https://github.com/apache/superset/pull/13165) fix(native-filters): correct apply of native filter scopes (@simcha90)
|
||||
- [#13154](https://github.com/apache/superset/pull/13154) fix(explore): Chart panel overflowing (@kgabryje)
|
||||
- [#13120](https://github.com/apache/superset/pull/13120) fix: misspelling Erik Ritter (@etr2460)
|
||||
- [#12955](https://github.com/apache/superset/pull/12955) fix(alert/report): add/edit modal issue (@lilykuang)
|
||||
- [#13133](https://github.com/apache/superset/pull/13133) fix(explore): Certificate icon not displaying for certified metrics (@kgabryje)
|
||||
- [#13147](https://github.com/apache/superset/pull/13147) fix(database): ensure pk_constraint is JSON serializable (@villebro)
|
||||
- [#13138](https://github.com/apache/superset/pull/13138) fix(chart-data-api): support numeric temporal columns (@villebro)
|
||||
- [#13090](https://github.com/apache/superset/pull/13090) fix(alerts): void query with numeric comparison (@dpgaspar)
|
||||
- [#13109](https://github.com/apache/superset/pull/13109) fix(FilterBox): treat empty defaultValues as null (@ktmud)
|
||||
- [#13094](https://github.com/apache/superset/pull/13094) fix: Fix switching viz type to and from Filter box (@kgabryje)
|
||||
- [#13022](https://github.com/apache/superset/pull/13022) fix: Add some missing Chinese translation content, including superset-ui project (@cdmikechen)
|
||||
- [#13000](https://github.com/apache/superset/pull/13000) fix(native-filters): set currentValue null when empty (@villebro)
|
||||
- [#13061](https://github.com/apache/superset/pull/13061) fix: Update http error code from 400 to 403 for permission error (@duynguyenhoang)
|
||||
- [#13029](https://github.com/apache/superset/pull/13029) fix(explore): Enable selecting an option not included in suggestions (@kgabryje)
|
||||
- [#13076](https://github.com/apache/superset/pull/13076) fix: API tests, make them possible to run independently again (@dpgaspar)
|
||||
- [#13051](https://github.com/apache/superset/pull/13051) fix: add config to disable dataset ownership on the old api (@dpgaspar)
|
||||
- [#12931](https://github.com/apache/superset/pull/12931) fix: add required \* indicator to message content/notif method in alert/report modal (@riahk)
|
||||
- [#13075](https://github.com/apache/superset/pull/13075) fix(ci): multiline regex in change detection (@villebro)
|
||||
- [#13008](https://github.com/apache/superset/pull/13008) fix: Disabled state button transition time (@AAfghahi)
|
||||
- [#13059](https://github.com/apache/superset/pull/13059) fix: sorting by saved metric (@villebro)
|
||||
- [#13041](https://github.com/apache/superset/pull/13041) fix: timeout context manager on Windows (@betodealmeida)
|
||||
- [#13042](https://github.com/apache/superset/pull/13042) fix: vertical scroll in query history (@betodealmeida)
|
||||
- [#13026](https://github.com/apache/superset/pull/13026) fix: UI toast typo (@dpgaspar)
|
||||
- [#13039](https://github.com/apache/superset/pull/13039) fix(build): black failing on master, add to required checks (@robdiciuccio)
|
||||
- [#13024](https://github.com/apache/superset/pull/13024) fix: fix the untranslated text content of Dashboard page (@cdmikechen)
|
||||
- [#13034](https://github.com/apache/superset/pull/13034) fix(ci): remove signature requirements for commits to master (@nytai)
|
||||
- [#12999](https://github.com/apache/superset/pull/12999) fix: add alerts and report to default config (@dpgaspar)
|
||||
- [#12945](https://github.com/apache/superset/pull/12945) fix: refresh dashboard list after bulk delete (@michael-s-molina)
|
||||
- [#12923](https://github.com/apache/superset/pull/12923) fix: added text and changed margins (@AAfghahi)
|
||||
- [#12966](https://github.com/apache/superset/pull/12966) fix: typo to apache/superset (@AAfghahi)
|
||||
- [#12973](https://github.com/apache/superset/pull/12973) fix: SQL Lab editor height in Safari (@betodealmeida)
|
||||
- [#12956](https://github.com/apache/superset/pull/12956) fix: SqlLab Run button fix (@AAfghahi)
|
||||
- [#12953](https://github.com/apache/superset/pull/12953) fix: Detecting top scroll on Dashboard header (@kkucharc)
|
||||
- [#12933](https://github.com/apache/superset/pull/12933) fix(viz): improve dtype inference logic (@villebro)
|
||||
- [#12859](https://github.com/apache/superset/pull/12859) fix: Add inclusive and exclusive text for start date and end date (@maloun96)
|
||||
- [#12930](https://github.com/apache/superset/pull/12930) fix(viz): bump table viz to fix ordering bug (@villebro)
|
||||
- [#12906](https://github.com/apache/superset/pull/12906) fix: Config for dataset health check (@graceguo-supercat)
|
||||
- [#12905](https://github.com/apache/superset/pull/12905) fix(chart): allow `null` for optional query object props (@ktmud)
|
||||
- [#12898](https://github.com/apache/superset/pull/12898) fix: comment typo (@etr2460)
|
||||
- [#12890](https://github.com/apache/superset/pull/12890) fix(explore): missing select when groupby without metrics (@villebro)
|
||||
- [#12579](https://github.com/apache/superset/pull/12579) fix: Installing Superset Locally Using Docker Compose (@mephinet)
|
||||
- [#12841](https://github.com/apache/superset/pull/12841) fix: correct title weights in UPDATING.md (@eschutho)
|
||||
- [#12836](https://github.com/apache/superset/pull/12836) fix: remove explicit cursor closing for BQ (@betodealmeida)
|
||||
- [#12625](https://github.com/apache/superset/pull/12625) fix(CI): properly configure cancel duplicates (@ktmud)
|
||||
- [#12736](https://github.com/apache/superset/pull/12736) fix: Remove double tooltip from metric label (@kgabryje)
|
||||
- [#12800](https://github.com/apache/superset/pull/12800) fix: rm grace period field for reports modal (@riahk)
|
||||
- [#12821](https://github.com/apache/superset/pull/12821) fix: don't close cursor before closing connection (@betodealmeida)
|
||||
- [#12811](https://github.com/apache/superset/pull/12811) fix(reports): handle exceptions properly in scope (@dpgaspar)
|
||||
- [#12742](https://github.com/apache/superset/pull/12742) fix: Prevent dashboard with filter_values template cause incompatible indicator (@graceguo-supercat)
|
||||
- [#12219](https://github.com/apache/superset/pull/12219) fix: tests errors and warnings - iteration 3 (#12212) (@michael-s-molina)
|
||||
- [#12224](https://github.com/apache/superset/pull/12224) fix: tests errors and warnings - iteration 5 (#12212) (@michael-s-molina)
|
||||
- [#12227](https://github.com/apache/superset/pull/12227) fix: tests errors and warnings - iteration 6 (#12212) (@michael-s-molina)
|
||||
- [#12223](https://github.com/apache/superset/pull/12223) fix: tests errors and warnings - iteration 4 (#12212) (@michael-s-molina)
|
||||
- [#12245](https://github.com/apache/superset/pull/12245) fix: tests errors and warnings - iteration 7 (#12212) (@michael-s-molina)
|
||||
- [#12214](https://github.com/apache/superset/pull/12214) fix: test errors and warnings - iteration 2 (#12212) (@michael-s-molina)
|
||||
- [#12706](https://github.com/apache/superset/pull/12706) fix: update latest tag action to use set-output (@eschutho)
|
||||
- [#12658](https://github.com/apache/superset/pull/12658) fix(dashboard): top dropdown indicator in tab moved closer to the bottom edge (@kkucharc)
|
||||
- [#12519](https://github.com/apache/superset/pull/12519) fix(native-filters): Reset column field for removed dataset (@agatapst)
|
||||
- [#12524](https://github.com/apache/superset/pull/12524) fix(native-filters): Improve UI for long native filters names (@agatapst)
|
||||
- [#12687](https://github.com/apache/superset/pull/12687) fix(native-filters): Show incompatible native filters indicator (@agatapst)
|
||||
- [#12702](https://github.com/apache/superset/pull/12702) fix(load_examples): better fix for load_data (@betodealmeida)
|
||||
- [#12692](https://github.com/apache/superset/pull/12692) fix: Adding gatsby remove serviceworker (@craig-rueda)
|
||||
- [#12659](https://github.com/apache/superset/pull/12659) fix(explore): Error message not displayed correctly in Timeseries table chart (@kgabryje)
|
||||
- [#12627](https://github.com/apache/superset/pull/12627) fix: Stabilize and deprecate legacy alerts module (@robdiciuccio)
|
||||
- [#12638](https://github.com/apache/superset/pull/12638) fix(CI): remove duplicate hive and presto tests (@ktmud)
|
||||
- [#12607](https://github.com/apache/superset/pull/12607) fix: save tabs when saving the query bug (@hughhhh)
|
||||
- [#12240](https://github.com/apache/superset/pull/12240) fix: helm chart to use Bitnami chart (@liamnv)
|
||||
- [#12567](https://github.com/apache/superset/pull/12567) fix: update helm chart repository (@palindrom615)
|
||||
- [#12526](https://github.com/apache/superset/pull/12526) fix: ignore system files on import (@betodealmeida)
|
||||
- [#12182](https://github.com/apache/superset/pull/12182) fix: Add Omnibar Feature Flag (@hughhhh)
|
||||
- [#12252](https://github.com/apache/superset/pull/12252) fix: Displaying filter indicators (@agatapst)
|
||||
- [#12360](https://github.com/apache/superset/pull/12360) fix: css templates modal cleanup: keep modal open on error, utilize useEffect (@riahk)
|
||||
- [#12467](https://github.com/apache/superset/pull/12467) fix(alert/report): remove crontab guru link from add/edit modal (@lilykuang)
|
||||
- [#12461](https://github.com/apache/superset/pull/12461) fix(releasing): svn dockerfile requirements path (@villebro)
|
||||
- [#12412](https://github.com/apache/superset/pull/12412) fix: uneven list header padding (#12029) (@michael-s-molina)
|
||||
- [#12432](https://github.com/apache/superset/pull/12432) fix(explore): fixed table header in chrome (@junlincc)
|
||||
- [#12433](https://github.com/apache/superset/pull/12433) fix: update savedatasetmodal message (@hughhhh)
|
||||
- [#12354](https://github.com/apache/superset/pull/12354) fix(api): prefix class names on events actions (@dpgaspar)
|
||||
- [#12404](https://github.com/apache/superset/pull/12404) fix(explore): Prevent duplicated query by data table (@graceguo-supercat)
|
||||
|
||||
**Others**
|
||||
- [#13777](https://github.com/apache/superset/pull/13777) docs: added release notes for 1.1 (@srinify)
|
||||
- [#13588](https://github.com/apache/superset/pull/13588) chore: script for changelog (@lilykuang)
|
||||
- [#13402](https://github.com/apache/superset/pull/13402) docs: add file for users to see status of feature flags (@eschutho)
|
||||
- [#13431](https://github.com/apache/superset/pull/13431) chore: clean remaining old directed force graph code (@mayurnewase)
|
||||
- [#12882](https://github.com/apache/superset/pull/12882) chore: bump pyarrow and pandas (@villebro)
|
||||
- [#13304](https://github.com/apache/superset/pull/13304) test: change data-test-id to data-test in FlashProvider (@yardz)
|
||||
- [#13171](https://github.com/apache/superset/pull/13171) docs: Connecting to Trino Databases (@dungdm93)
|
||||
- [#12238](https://github.com/apache/superset/pull/12238) chore: update instructions for Pinot in connecting to databases (@pablo-tech)
|
||||
- [#12920](https://github.com/apache/superset/pull/12920) refactor: Bootstrap to AntD - Collapse (@michael-s-molina)
|
||||
- [#13292](https://github.com/apache/superset/pull/13292) test: replace data-test-id with data-test (@ktmud)
|
||||
- [#13220](https://github.com/apache/superset/pull/13220) test: Switching FlashProvider to function component & creating tests (@yardz)
|
||||
- [#13235](https://github.com/apache/superset/pull/13235) refactor: Move raise_for_dashboard_access to security manager (@bolkedebruin)
|
||||
- [#13212](https://github.com/apache/superset/pull/13212) refactor(api): csrf token on the new REST API (@dpgaspar)
|
||||
- [#12870](https://github.com/apache/superset/pull/12870) test: fix schedules tests (@kstrz)
|
||||
- [#12864](https://github.com/apache/superset/pull/12864) test: reports/commands_tests (@kstrz)
|
||||
- [#13241](https://github.com/apache/superset/pull/13241) test: add Tests and Storybook for AsyncAceEditor (@michael-s-molina)
|
||||
- [#13268](https://github.com/apache/superset/pull/13268) refactor(native-filters): Refactor filters config modal module (@simcha90)
|
||||
- [#13258](https://github.com/apache/superset/pull/13258) chore(viz): bump superset-ui 0.17.10 (@villebro)
|
||||
- [#13260](https://github.com/apache/superset/pull/13260) ci: always execute tests on non-PRs (@villebro)
|
||||
- [#12122](https://github.com/apache/superset/pull/12122) refactor: Bootstrap to AntD - Alert (@michael-s-molina)
|
||||
- [#13215](https://github.com/apache/superset/pull/13215) chore: bump node.js to v14 (@kgabryje)
|
||||
- [#13250](https://github.com/apache/superset/pull/13250) refactor: add frontend debounce constants (@ktmud)
|
||||
- [#13213](https://github.com/apache/superset/pull/13213) test: Tests and Storybook entry for the ModalTrigger Component (@geido)
|
||||
- [#13176](https://github.com/apache/superset/pull/13176) test: Tests and Storybook entry for the Popover component (@geido)
|
||||
- [#12773](https://github.com/apache/superset/pull/12773) chore: Tab title to be empty when creating a new tab (@geido)
|
||||
- [#13002](https://github.com/apache/superset/pull/13002) refactor: Bootstrap to AntD - DropdownButton (@michael-s-molina)
|
||||
- [#13098](https://github.com/apache/superset/pull/13098) refactor: HighligthedSQL into functional component with Typescript (@AAfghahi)
|
||||
- [#13143](https://github.com/apache/superset/pull/13143) chore: add non-dev docker-compose workflow (@nytai)
|
||||
- [#13185](https://github.com/apache/superset/pull/13185) chore: use shillelagh instead of gsheetsdb (@betodealmeida)
|
||||
- [#13201](https://github.com/apache/superset/pull/13201) docs: Fix typo in pyathena connection string (@ctSkennerton)
|
||||
- [#13179](https://github.com/apache/superset/pull/13179) test: Adding test and storybook to "Loading" component. (@yardz)
|
||||
- [#13184](https://github.com/apache/superset/pull/13184) test: creates storybook and tests for Tooltip component (@michael-s-molina)
|
||||
- [#13136](https://github.com/apache/superset/pull/13136) test(coverage): ignore database migrations on coverage reports (@willbarrett)
|
||||
- [#13142](https://github.com/apache/superset/pull/13142) refactor: remove deprecated field from frontend usage (@suddjian)
|
||||
- [#13087](https://github.com/apache/superset/pull/13087) perf: add lazy loading along react-router routes and router links in menu (@nytai)
|
||||
- [#13139](https://github.com/apache/superset/pull/13139) style(list view): table sort icon alignment (@nytai)
|
||||
- [#13149](https://github.com/apache/superset/pull/13149) chore: change test environment to jsdom (@michael-s-molina)
|
||||
- [#13100](https://github.com/apache/superset/pull/13100) chore: upgrade to npm 7 and superset-ui 0.17.9 (@ktmud)
|
||||
- [#13113](https://github.com/apache/superset/pull/13113) build: add more files to .dockerignore (@ktmud)
|
||||
- [#13021](https://github.com/apache/superset/pull/13021) refactor(native-filters): decouple params from filter config modal (first phase) (@simcha90)
|
||||
- [#13079](https://github.com/apache/superset/pull/13079) test(frontend): improves react-testing-library configuration (@michael-s-molina)
|
||||
- [#13083](https://github.com/apache/superset/pull/13083) docs: Added a note about the ! prefix for breaking changes to CONTRIBUTING.md (@garden-of-delete)
|
||||
- [#13069](https://github.com/apache/superset/pull/13069) chore: lock down npm to v6 (@ktmud)
|
||||
- [#13063](https://github.com/apache/superset/pull/13063) style: fix typo in documentation (@dbz10)
|
||||
- [#12981](https://github.com/apache/superset/pull/12981) docs(changelog): add entries for 1.0.1 (@villebro)
|
||||
- [#12982](https://github.com/apache/superset/pull/12982) ci: skip cypress if no code changes (@villebro)
|
||||
- [#12970](https://github.com/apache/superset/pull/12970) chore: add cypress required checks for branch protection (@eschutho)
|
||||
- [#13014](https://github.com/apache/superset/pull/13014) chore: updates storybook to version 6.1.17 (@michael-s-molina)
|
||||
- [#13004](https://github.com/apache/superset/pull/13004) chore: Swap Slack Url 2 more places (@srinify)
|
||||
- [#12889](https://github.com/apache/superset/pull/12889) refactor(native-filters): refactor code of native filters (@simcha90)
|
||||
- [#12991](https://github.com/apache/superset/pull/12991) docs: typo fix in release notes (@iercan)
|
||||
- [#12873](https://github.com/apache/superset/pull/12873) refactor: TemplateParamsEditor.jsx converted from class to functional component (@lyndsiWilliams)
|
||||
- [#12806](https://github.com/apache/superset/pull/12806) refactor: speed up conversion from dataframe to list of records (@TColl)
|
||||
- [#12980](https://github.com/apache/superset/pull/12980) chore: rename action to docker-build (@eschutho)
|
||||
- [#12969](https://github.com/apache/superset/pull/12969) chore: add more required checks for branch protection (@eschutho)
|
||||
- [#12974](https://github.com/apache/superset/pull/12974) chore: swap slack url on ASF docs (@srinify)
|
||||
- [#12972](https://github.com/apache/superset/pull/12972) chore: cleanup no-op Cypress (chrome) job (@ktmud)
|
||||
- [#12968](https://github.com/apache/superset/pull/12968) chore: change name of lint action (@eschutho)
|
||||
- [#12967](https://github.com/apache/superset/pull/12967) chore: remove example token to avoid confusion (@ktmud)
|
||||
- [#12928](https://github.com/apache/superset/pull/12928) chore: add more required checks (@eschutho)
|
||||
- [#12583](https://github.com/apache/superset/pull/12583) ci: conditionally skip python and frontend tests (@villebro)
|
||||
- [#12180](https://github.com/apache/superset/pull/12180) test: Added some Cypress tests for Native Filters (@adam-stasiak)
|
||||
- [#12936](https://github.com/apache/superset/pull/12936) test: fix table chart sort order E2E tests (@ktmud)
|
||||
- [#12921](https://github.com/apache/superset/pull/12921) chore: rename duplicate build jobs (@eschutho)
|
||||
- [#12885](https://github.com/apache/superset/pull/12885) test: speedup celery tests (@kstrz)
|
||||
- [#12901](https://github.com/apache/superset/pull/12901) build(deps): Bump jinja2 to 2.11.3 (@robdiciuccio)
|
||||
- [#12848](https://github.com/apache/superset/pull/12848) chore(dashboard_rbac): remove overlapping security tests (@amitmiran137)
|
||||
- [#12894](https://github.com/apache/superset/pull/12894) chore: remove SIP-38 feature flag (@villebro)
|
||||
- [#12694](https://github.com/apache/superset/pull/12694) chore: add required review on master (@eschutho)
|
||||
- [#12738](https://github.com/apache/superset/pull/12738) refactor: Bootstrap to AntD - Radio (@michael-s-molina)
|
||||
- [#12869](https://github.com/apache/superset/pull/12869) refactor: dbapi exception mapping for dbapi's (@dpgaspar)
|
||||
- [#12884](https://github.com/apache/superset/pull/12884) chore(lint): fix pre-commit error (@villebro)
|
||||
- [#12857](https://github.com/apache/superset/pull/12857) refactor(color-schemes): refactor setting of color schemes (@simcha90)
|
||||
- [#12774](https://github.com/apache/superset/pull/12774) refactor: Bootstrap to AntD - Label (@michael-s-molina)
|
||||
- [#10771](https://github.com/apache/superset/pull/10771) [Helm] Automate datasource import (@ejianu)
|
||||
- [#12610](https://github.com/apache/superset/pull/12610) build: Skip loading example data from configs in CI (@robdiciuccio)
|
||||
- [#12832](https://github.com/apache/superset/pull/12832) refactor: Bootstrap to AntD - Button (@michael-s-molina)
|
||||
- [#12854](https://github.com/apache/superset/pull/12854) chore: bump superset-ui packages to v0.17.2 and v0.17.3 (@ktmud)
|
||||
- [#12846](https://github.com/apache/superset/pull/12846) chore: Slight formatting fixes in exploring-data.mdx (@neilsmiller)
|
||||
- [#12812](https://github.com/apache/superset/pull/12812) chore(native-filters): Connect indicator magnifier with Filter Bar (@agatapst)
|
||||
- [#12828](https://github.com/apache/superset/pull/12828) chore: update capitalization guideline (@ktmud)
|
||||
- [#12831](https://github.com/apache/superset/pull/12831) docs: fix config comment (@zsellami)
|
||||
- [#12778](https://github.com/apache/superset/pull/12778) chore: Added documentation for 1.0 flags (@srinify)
|
||||
- [#12743](https://github.com/apache/superset/pull/12743) docs: wrong port name in NOTES.txt (@maddyobrienjones)
|
||||
- [#12816](https://github.com/apache/superset/pull/12816) docs: add Cape Crypto to users list (@leocape)
|
||||
- [#12833](https://github.com/apache/superset/pull/12833) docs: fix broken link to spark. (@pr-lawrence)
|
||||
- [#12772](https://github.com/apache/superset/pull/12772) refactor: change Windows new tab shortcut to ctrl + q (@lyndsiWilliams)
|
||||
- [#10270](https://github.com/apache/superset/pull/10270) refactor: migrate table chart to new API (@ktmud)
|
||||
- [#12815](https://github.com/apache/superset/pull/12815) chore: Upgrade react-dnd to 11.1.3 (@kgabryje)
|
||||
- [#12710](https://github.com/apache/superset/pull/12710) docs: Add support for Hologres (@TimothyDing)
|
||||
- [#12818](https://github.com/apache/superset/pull/12818) docs: add A3Data to users list (@neylsoncrepalde)
|
||||
- [#12795](https://github.com/apache/superset/pull/12795) refactor: Updated tooltip help text in edit database > SQL Lab settings (@lyndsiWilliams)
|
||||
- [#12813](https://github.com/apache/superset/pull/12813) chore: adding feature flags v1 documentation in Release Notes (@srinify)
|
||||
- [#12748](https://github.com/apache/superset/pull/12748) chore(docs): update tox testing run to relevant python env (@amitmiran137)
|
||||
- [#12754](https://github.com/apache/superset/pull/12754) chore: add breaking change to title regex (@eschutho)
|
||||
- [#12749](https://github.com/apache/superset/pull/12749) docs: Adding design guidelines to CONTRIBUTING.md (@mihir174)
|
||||
- [#12792](https://github.com/apache/superset/pull/12792) docs: fix 1.0.0 README images (v2) (@dpgaspar)
|
||||
- [#12781](https://github.com/apache/superset/pull/12781) docs: 1.0.0 release notes update: media + feature flags (@garden-of-delete)
|
||||
- [#12777](https://github.com/apache/superset/pull/12777) docs: update changelog for 1.0.0 (@eschutho)
|
||||
- [#12626](https://github.com/apache/superset/pull/12626) docs: Updates to Superset Site for 1.0 (@srinify)
|
||||
- [#12655](https://github.com/apache/superset/pull/12655) test(native-filters): scoping tree in native filters modal (@simcha90)
|
||||
- [#12605](https://github.com/apache/superset/pull/12605) chore: upgrade Cypress to 6.2.1 (@ktmud)
|
||||
- [#12218](https://github.com/apache/superset/pull/12218) refactor(explore): Enhance Dataset and Control panel Collapse components (@geido)
|
||||
- [#12739](https://github.com/apache/superset/pull/12739) docs: Fixed typo on line 348 (@lyndsiWilliams)
|
||||
- [#12693](https://github.com/apache/superset/pull/12693) docs: Remove gatsby-plugin-offline (@robdiciuccio)
|
||||
- [#12615](https://github.com/apache/superset/pull/12615) test: oracle engine spec (@kstrz)
|
||||
- [#12520](https://github.com/apache/superset/pull/12520) test: hive db engine spec (@kstrz)
|
||||
- [#12737](https://github.com/apache/superset/pull/12737) chore: Replace Expired Join Slack Community URL With New One (@srinify)
|
||||
- [#12718](https://github.com/apache/superset/pull/12718) docs: link fix in CONTRIBUTING.md (@ayanginet)
|
||||
- [#12709](https://github.com/apache/superset/pull/12709) ci: use git submodules for (securely) using third party Github Actions (@TobKed)
|
||||
- [#12678](https://github.com/apache/superset/pull/12678) chore: add a note about using Draft PR's importance (@amitmiran137)
|
||||
- [#12673](https://github.com/apache/superset/pull/12673) docs(db engines): Updade DB2 connection prefix (@cabo40)
|
||||
- [#12682](https://github.com/apache/superset/pull/12682) docs: updates updating.md with 1.0 (@dpgaspar)
|
||||
- [#12455](https://github.com/apache/superset/pull/12455) chore: apply capitalization guidelines - iteration 9 (#12343) (@michael-s-molina)
|
||||
- [#12666](https://github.com/apache/superset/pull/12666) chore: skip CI on draft PR (@amitmiran137)
|
||||
- [#12594](https://github.com/apache/superset/pull/12594) test: presto engine spec tests (@kstrz)
|
||||
- [#12539](https://github.com/apache/superset/pull/12539) test(hana): add test_convert_dttm (@kstrz)
|
||||
- [#12633](https://github.com/apache/superset/pull/12633) docs(release): add some improvements from 1.0.0 release round (@villebro)
|
||||
- [#12616](https://github.com/apache/superset/pull/12616) test: sqlite db engine spec (@kstrz)
|
||||
- [#12642](https://github.com/apache/superset/pull/12642) docs: fix redirect from bad find/replace (@mistercrunch)
|
||||
- [#12637](https://github.com/apache/superset/pull/12637) docs: README.md navigation changes for 1.0.0 (@garden-of-delete)
|
||||
- [#12617](https://github.com/apache/superset/pull/12617) refactor: rename DbColumnType to GenericDataType (@ktmud)
|
||||
- [#12171](https://github.com/apache/superset/pull/12171) refactor: Sync Scoping tree with Forms data (@simcha90)
|
||||
- [#12413](https://github.com/apache/superset/pull/12413) chore(chart): Save modal select placeholder value (@nikolagigic)
|
||||
- [#12591](https://github.com/apache/superset/pull/12591) docs(release): add vote thread to result template (@villebro)
|
||||
- [#12570](https://github.com/apache/superset/pull/12570) refactor: extract to method is_user_admin (@amitmiran137)
|
||||
- [#12571](https://github.com/apache/superset/pull/12571) chore: update contribution guide (@amitmiran137)
|
||||
- [#12511](https://github.com/apache/superset/pull/12511) docs : release notes 1.0 (@garden-of-delete)
|
||||
- [#12563](https://github.com/apache/superset/pull/12563) chore: upgrade CI runner to Ubuntu 20.04 (@ktmud)
|
||||
- [#12534](https://github.com/apache/superset/pull/12534) build(cypress): Add Cypress parallelization with obfuscated record key (@robdiciuccio)
|
||||
- [#12490](https://github.com/apache/superset/pull/12490) test: /postgres engine spec test coverage (@kstrz)
|
||||
- [#12548](https://github.com/apache/superset/pull/12548) test: mysql engine spec (@kstrz)
|
||||
- [#12510](https://github.com/apache/superset/pull/12510) build: fix emotion theme errors when npm link @superset-ui/core (@ktmud)
|
||||
- [#12523](https://github.com/apache/superset/pull/12523) ci(cypress): disable failing test (@villebro)
|
||||
- [#12405](https://github.com/apache/superset/pull/12405) chore: remove duplicate DashboardFilter class and change imports accordingly (@amitmiran137)
|
||||
- [#12420](https://github.com/apache/superset/pull/12420) chore: Add owner field to the alerts list (@bkyryliuk)
|
||||
- [#12394](https://github.com/apache/superset/pull/12394) build: add cancel-workflow-runs action locally (@ktmud)
|
||||
- [#12267](https://github.com/apache/superset/pull/12267) docs: fix styles and add algolia search classes (@pkdotson)
|
||||
- [#12020](https://github.com/apache/superset/pull/12020) build(deps): bump ini from 1.3.5 to 1.3.8 in /docs (@dependabot[bot])
|
||||
- [#12232](https://github.com/apache/superset/pull/12232) build(deps): bump urijs from 1.19.1 to 1.19.4 in /superset-frontend (@dependabot[bot])
|
||||
- [#11869](https://github.com/apache/superset/pull/11869) docs: reword and cleanup docs for local dev server (@ktmud)
|
||||
|
||||
### 1.0.1 (Tue Feb 2 09:24:40 2021 +0000)
|
||||
- [#12872](https://github.com/apache/superset/pull/12872) feat(release): add github token to changelog script (#12872) (@dpgaspar)
|
||||
- [#12886](https://github.com/apache/superset/pull/12886) fix: allow users to reset their passwords (#12886) (@dpgaspar)
|
||||
|
||||
+248
-16
@@ -39,9 +39,14 @@ little bit helps, and credit will always be given.
|
||||
- [Protocol](#protocol)
|
||||
- [Authoring](#authoring)
|
||||
- [Reviewing](#reviewing)
|
||||
- [Test Environments](#test-environments)
|
||||
- [Merging](#merging)
|
||||
- [Post-merge Responsibility](#post-merge-responsibility)
|
||||
- [Design Guidelines](#design-guidelines)
|
||||
- [Capitalization guidelines](#capitalization-guidelines)
|
||||
- [Sentence case](#sentence-case)
|
||||
- [How to refer to UI elements](#how-to-refer-to-ui-elements)
|
||||
- [\*\*Exceptions to sentence case:](#exceptions-to-sentence-case)
|
||||
- [Managing Issues and PRs](#managing-issues-and-prs)
|
||||
- [Reporting a Security Vulnerability](#reporting-a-security-vulnerability)
|
||||
- [Revert Guidelines](#revert-guidelines)
|
||||
@@ -76,6 +81,7 @@ little bit helps, and credit will always be given.
|
||||
- [Translating](#translating)
|
||||
- [Enabling language selection](#enabling-language-selection)
|
||||
- [Extracting new strings for translation](#extracting-new-strings-for-translation)
|
||||
- [Updating language files](#updating-language-files)
|
||||
- [Creating a new language dictionary](#creating-a-new-language-dictionary)
|
||||
- [Tips](#tips)
|
||||
- [Adding a new datasource](#adding-a-new-datasource)
|
||||
@@ -222,6 +228,7 @@ Finally, never submit a PR that will put master branch in broken state. If the P
|
||||
- `fix(chart-api): cached-indicator always shows value is cached`
|
||||
|
||||
- Add prefix `[WIP]` to title if not ready for review (WIP = work-in-progress). We recommend creating a PR with `[WIP]` first and remove it once you have passed CI test and read through your code changes at least once.
|
||||
- If you believe your PR contributes a potentially breaking change, put a `!` after the semantic prefix but before the colon in the PR title, like so: `feat!: Added foo functionality to bar`
|
||||
- **Screenshots/GIFs:** Changes to user interface require before/after screenshots, or GIF for interactions
|
||||
- Recommended capture tools ([Kap](https://getkap.co/), [LICEcap](https://www.cockos.com/licecap/), [Skitch](https://download.cnet.com/Skitch/3000-13455_4-189876.html))
|
||||
- If no screenshot is provided, the committers will mark the PR with `need:screenshot` label and will not review until screenshot is provided.
|
||||
@@ -242,6 +249,20 @@ Finally, never submit a PR that will put master branch in broken state. If the P
|
||||
- If you are asked to update your pull request with some changes there's no need to create a new one. Push your changes to the same branch.
|
||||
- The committers reserve the right to reject any PR and in some cases may request the author to file an issue.
|
||||
|
||||
#### Test Environments
|
||||
|
||||
- Members of the Apache GitHub org can launch an ephemeral test environment directly on a pull request by creating a comment containing (only) the command `/testenv up`.
|
||||
- Note that org membership must be public in order for this validation to function properly.
|
||||
- Feature flags may be set for a test environment by specifying the flag name (prefixed with `FEATURE_`) and value after the command.
|
||||
- Format: `/testenv up FEATURE_<feature flag name>=true|false`
|
||||
- Example: `/testenv up FEATURE_DASHBOARD_NATIVE_FILTERS=true`
|
||||
- Multiple feature flags may be set in single command, separated by whitespace
|
||||
- A comment will be created by the workflow script with the address and login information for the ephemeral environment.
|
||||
- Test environments may be created once the Docker build CI workflow for the PR has completed successfully.
|
||||
- Test environments do not currently update automatically when new commits are added to a pull request.
|
||||
- Test environments do not currently support async workers, though this is planned.
|
||||
- Running test environments will be shutdown upon closing the pull request.
|
||||
|
||||
#### Merging
|
||||
|
||||
- At least one approval is required for merging a PR.
|
||||
@@ -258,9 +279,11 @@ Finally, never submit a PR that will put master branch in broken state. If the P
|
||||
### Capitalization guidelines
|
||||
|
||||
#### Sentence case
|
||||
Use sentence-case capitalization for everything in the UI (except these **).
|
||||
|
||||
Use sentence-case capitalization for everything in the UI (except these \*\*).
|
||||
|
||||
Sentence case is predominantly lowercase. Capitalize only the initial character of the first word, and other words that require capitalization, like:
|
||||
|
||||
- **Proper nouns.** Objects in the product _are not_ considered proper nouns e.g. dashboards, charts, saved queries etc. Proprietary feature names eg. SQL Lab, Preset Manager _are_ considered proper nouns
|
||||
- **Acronyms** (e.g. CSS, HTML)
|
||||
- When referring to **UI labels that are themselves capitalized** from sentence case (e.g. page titles - Dashboards page, Charts page, Saved queries page, etc.)
|
||||
@@ -271,10 +294,12 @@ Title case: "A Dog Takes a Walk in Paris"
|
||||
Sentence case: "A dog takes a walk in Paris"
|
||||
|
||||
**Why sentence case?**
|
||||
|
||||
- It’s generally accepted as the quickest to read
|
||||
- It’s the easiest form to distinguish between common and proper nouns
|
||||
|
||||
#### How to refer to UI elements
|
||||
|
||||
When writing about a UI element, use the same capitalization as used in the UI.
|
||||
|
||||
For example, if an input field is labeled “Name” then you refer to this as the “Name input field”. Similarly, if a button has the label “Save” in it, then it is correct to refer to the “Save button”.
|
||||
@@ -292,7 +317,7 @@ Often a product page will have the same title as the objects it contains. In thi
|
||||
- Queries that you save will appear on the Saved queries page
|
||||
- Create custom queries in SQL Lab then create dashboards
|
||||
|
||||
#### **Exceptions to sentence case:
|
||||
#### \*\*Exceptions to sentence case:
|
||||
|
||||
- Input labels, buttons and UI tabs are all caps
|
||||
- User input values (e.g. column names, SQL Lab tab names) should be in their original case
|
||||
@@ -333,6 +358,8 @@ If the PR passes CI tests and does not have any `need:` labels, it is ready for
|
||||
|
||||
If an issue/PR has been inactive for >=30 days, it will be closed. If it does not have any status label, add `inactive`.
|
||||
|
||||
When creating a PR, if you're aiming to have it included in a specific release, please tag it with the version label. For example, to have a PR considered for inclusion in Superset 1.1 use the label `v1.1`.
|
||||
|
||||
## Reporting a Security Vulnerability
|
||||
|
||||
Please report security vulnerabilities to private@superset.apache.org.
|
||||
@@ -415,13 +442,29 @@ superset db upgrade
|
||||
# Create default roles and permissions
|
||||
superset init
|
||||
|
||||
# Load some data to play with
|
||||
superset load_examples
|
||||
# Load some data to play with (you must create an Admin user with the username `admin` for this command to work)
|
||||
superset load-examples
|
||||
|
||||
# Start the Flask dev web server from inside your virtualenv.
|
||||
# Note that your page may not have css at this point.
|
||||
# See instructions below how to build the front-end assets.
|
||||
FLASK_ENV=development superset run -p 8088 --with-threads --reload --debugger
|
||||
|
||||
Or you can install via our Makefile
|
||||
|
||||
```bash
|
||||
# Create a virtual environment and activate it (recommended)
|
||||
$ python3 -m venv venv # setup a python3 virtualenv
|
||||
$ source venv/bin/activate
|
||||
|
||||
# install pip packages + pre-commit
|
||||
$ make install
|
||||
|
||||
# Install superset pip packages and setup env only
|
||||
$ make superset
|
||||
|
||||
# Setup pre-commit only
|
||||
$ make pre-commit
|
||||
```
|
||||
|
||||
**Note: the FLASK_APP env var should not need to be set, as it's currently controlled
|
||||
@@ -463,7 +506,7 @@ Frontend assets (TypeScript, JavaScript, CSS, and images) must be compiled in or
|
||||
|
||||
##### nvm and node
|
||||
|
||||
First, be sure you are using recent versions of NodeJS and npm. We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage your node environment:
|
||||
First, be sure you are using recent versions of Node.js and npm. We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage your node environment:
|
||||
|
||||
```bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash
|
||||
@@ -473,8 +516,19 @@ nvm install
|
||||
nvm use
|
||||
```
|
||||
|
||||
Or if you use the default macOS starting with Catalina shell `zsh`, try:
|
||||
```zsh
|
||||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh)"
|
||||
```
|
||||
|
||||
For those interested, you may also try out [avn](https://github.com/nvm-sh/nvm#deeper-shell-integration) to automatically switch to the node version that is required to run Superset frontend.
|
||||
|
||||
We have upgraded our `package-lock.json` to use `lockfileversion: 2` from npm 7, so please make sure you have installed npm 7, too:
|
||||
|
||||
```bash
|
||||
npm install -g npm@7
|
||||
```
|
||||
|
||||
#### Install dependencies
|
||||
|
||||
Install third-party dependencies listed in `package.json` via:
|
||||
@@ -497,7 +551,7 @@ There are three types of assets you can build:
|
||||
|
||||
#### Webpack dev server
|
||||
|
||||
The dev server by default starts at `http://localhost:9000` and proxies the backend requests to `http://localhost:8080`. It's possible to change these settings:
|
||||
The dev server by default starts at `http://localhost:9000` and proxies the backend requests to `http://localhost:8088`. It's possible to change these settings:
|
||||
|
||||
```bash
|
||||
# Start the dev server at http://localhost:9000
|
||||
@@ -554,6 +608,8 @@ export enum FeatureFlag {
|
||||
those specified under FEATURE_FLAGS in `superset_config.py`. For example, `DEFAULT_FEATURE_FLAGS = { 'FOO': True, 'BAR': False }` in `superset/config.py` and `FEATURE_FLAGS = { 'BAR': True, 'BAZ': True }` in `superset_config.py` will result
|
||||
in combined feature flags of `{ 'FOO': True, 'BAR': True, 'BAZ': True }`.
|
||||
|
||||
The current status of the usability of each flag (stable vs testing, etc) can be found in `RESOURCES/FEATURE_FLAGS.md`.
|
||||
|
||||
## Git Hooks
|
||||
|
||||
Superset uses Git pre-commit hooks courtesy of [pre-commit](https://pre-commit.com/). To install run the following:
|
||||
@@ -563,12 +619,19 @@ pip3 install -r requirements/integration.txt
|
||||
pre-commit install
|
||||
```
|
||||
|
||||
A series of checks will now run when you make a git commit.
|
||||
|
||||
Alternatively it is possible to run pre-commit via tox:
|
||||
|
||||
```bash
|
||||
tox -e pre-commit
|
||||
```
|
||||
|
||||
Or by running pre-commit manually:
|
||||
```bash
|
||||
pre-commit run --all-files
|
||||
```
|
||||
|
||||
## Linting
|
||||
|
||||
Lint the project with:
|
||||
@@ -577,15 +640,17 @@ Lint the project with:
|
||||
# for python
|
||||
tox -e pylint
|
||||
|
||||
Alternatively, you can use pre-commit (mentioned above) for python linting
|
||||
|
||||
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/editor_integration.html)
|
||||
|
||||
# for frontend
|
||||
cd superset-frontend
|
||||
npm ci
|
||||
npm run lint
|
||||
```
|
||||
|
||||
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/editor_integration.html).
|
||||
|
||||
## Conventions
|
||||
|
||||
### Python
|
||||
@@ -671,6 +736,14 @@ Note that the test environment uses a temporary directory for defining the
|
||||
SQLite databases which will be cleared each time before the group of test
|
||||
commands are invoked.
|
||||
|
||||
There is also a utility script included in the Superset codebase to run python tests. The [readme can be
|
||||
found here](https://github.com/apache/superset/tree/master/scripts/tests)
|
||||
|
||||
To run all tests for example, run this script from the root directory:
|
||||
```bash
|
||||
scripts/tests/run.sh
|
||||
```
|
||||
|
||||
### Frontend Testing
|
||||
|
||||
We use [Jest](https://jestjs.io/) and [Enzyme](https://airbnb.io/enzyme/) to test TypeScript/JavaScript. Tests can be run with:
|
||||
@@ -697,7 +770,7 @@ export ENABLE_REACT_CRUD_VIEWS=true
|
||||
export CYPRESS_BASE_URL="http://localhost:8081"
|
||||
superset db upgrade
|
||||
superset load_test_users
|
||||
superset load_examples --load-test-data
|
||||
superset load-examples --load-test-data
|
||||
superset init
|
||||
superset run --port 8081
|
||||
```
|
||||
@@ -752,6 +825,130 @@ npm install
|
||||
npm run cypress open
|
||||
```
|
||||
|
||||
### Debugging Server App
|
||||
|
||||
Follow these instructions to debug the Flask app running inside a docker container.
|
||||
|
||||
First add the following to the ./docker-compose.yaml file
|
||||
|
||||
```diff
|
||||
superset:
|
||||
env_file: docker/.env
|
||||
image: *superset-image
|
||||
container_name: superset_app
|
||||
command: ["/app/docker/docker-bootstrap.sh", "app"]
|
||||
restart: unless-stopped
|
||||
+ cap_add:
|
||||
+ - SYS_PTRACE
|
||||
ports:
|
||||
- 8088:8088
|
||||
+ - 5678:5678
|
||||
user: "root"
|
||||
depends_on: *superset-depends-on
|
||||
volumes: *superset-volumes
|
||||
environment:
|
||||
CYPRESS_CONFIG: "${CYPRESS_CONFIG}"
|
||||
```
|
||||
|
||||
Start Superset as usual
|
||||
```bash
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
Install the required libraries and packages to the docker container
|
||||
|
||||
Enter the superset_app container
|
||||
```bash
|
||||
docker exec -it superset_app /bin/bash
|
||||
root@39ce8cf9d6ab:/app#
|
||||
```
|
||||
|
||||
Run the following commands inside the container
|
||||
```bash
|
||||
apt update
|
||||
apt install -y gdb
|
||||
apt install -y net-tools
|
||||
pip install debugpy
|
||||
```
|
||||
|
||||
Find the PID for the Flask process. Make sure to use the first PID. The Flask app will re-spawn a sub-process everytime you change any of the python code. So it's important to use the first PID.
|
||||
|
||||
```bash
|
||||
ps -ef
|
||||
|
||||
UID PID PPID C STIME TTY TIME CMD
|
||||
root 1 0 0 14:09 ? 00:00:00 bash /app/docker/docker-bootstrap.sh app
|
||||
root 6 1 4 14:09 ? 00:00:04 /usr/local/bin/python /usr/bin/flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0
|
||||
root 10 6 7 14:09 ? 00:00:07 /usr/local/bin/python /usr/bin/flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0
|
||||
```
|
||||
|
||||
Inject debugpy into the running Flask process. In this case PID 6.
|
||||
```bash
|
||||
python3 -m debugpy --listen 0.0.0.0:5678 --pid 6
|
||||
```
|
||||
|
||||
Verify that debugpy is listening on port 5678
|
||||
```bash
|
||||
netstat -tunap
|
||||
|
||||
Active Internet connections (servers and established)
|
||||
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
|
||||
tcp 0 0 0.0.0.0:5678 0.0.0.0:* LISTEN 462/python
|
||||
tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 6/python
|
||||
```
|
||||
|
||||
You are now ready to attach a debugger to the process. Using VSCode you can configure a launch configuration file .vscode/launch.json like so.
|
||||
```
|
||||
{
|
||||
"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": [
|
||||
{
|
||||
"localRoot": "${workspaceFolder}",
|
||||
"remoteRoot": "/app"
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
VSCode will not stop on breakpoints right away. We've attached to PID 6 however it does not yet know of any sub-processes. In order to "wakeup" the debugger you need to modify a python file. This will trigger Flask to reload the code and create a new sub-process. This new sub-process will be detected by VSCode and breakpoints will be activated.
|
||||
|
||||
|
||||
### Debugging Server App in Kubernetes Environment
|
||||
|
||||
To debug Flask running in POD inside kubernetes cluster. You'll need to make sure the pod runs as root and is granted the SYS_TRACE capability.These settings should not be used in production environments.
|
||||
|
||||
```
|
||||
securityContext:
|
||||
capabilities:
|
||||
add: ["SYS_PTRACE"]
|
||||
```
|
||||
|
||||
See (set capabilities for a container)[https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container] for more details.
|
||||
|
||||
Once the pod is running as root and has the SYS_PTRACE capability it will be able to debug the Flask app.
|
||||
|
||||
You can follow the same instructions as in the docker-compose. Enter the pod and install the required library and packages; gdb, netstat and debugpy.
|
||||
|
||||
Often in a kuernetes environment nodes are not addressable from ouside the cluster. VSCode will thus be unable to remotely connect to port 5678 on a kubernetes node. In order to do this you need to create a tunnel that port forwards 5678 to your local machine.
|
||||
|
||||
```
|
||||
kubectl port-forward pod/superset-<some random id> 5678:5678
|
||||
```
|
||||
|
||||
You can now launch your VSCode debugger with the same config as above. VSCode will connect to to 127.0.0.1:5678 which is forwarded by kubectl to your remote kubernetes POD.
|
||||
|
||||
|
||||
### Storybook
|
||||
|
||||
Superset includes a [Storybook](https://storybook.js.org/) to preview the layout/styling of various Superset components, and variations thereof. To open and view the Storybook:
|
||||
@@ -836,7 +1033,7 @@ To convert all PO files to formatted JSON files you can use the `po2json.sh` scr
|
||||
```
|
||||
|
||||
If you get errors running `po2json`, you might be running the Ubuntu package with the same
|
||||
name, rather than the NodeJS package (they have a different format for the arguments). If
|
||||
name, rather than the Node.js package (they have a different format for the arguments). If
|
||||
there is a conflict, you may need to update your `PATH` environment variable or fully qualify
|
||||
the executable path (e.g. `/usr/local/bin/po2json` instead of `po2json`).
|
||||
If you get a lot of `[null,***]` in `messages.json`, just delete all the `null,`.
|
||||
@@ -894,6 +1091,9 @@ yarn build
|
||||
Then use `npm link` to create symlinks of the plugins/superset-ui packages you want to edit in `superset-frontend/node_modules`:
|
||||
|
||||
```bash
|
||||
# Since npm 7, you have to install plugin dependencies separately, too
|
||||
cd ../../superset-ui/plugins/[PLUGIN NAME] && npm install --legacy-peer-deps
|
||||
|
||||
cd superset/superset-frontend
|
||||
npm link ../../superset-ui/plugins/[PLUGIN NAME]
|
||||
|
||||
@@ -937,7 +1137,7 @@ Submissions will be considered for submission (or removal) on a case-by-case bas
|
||||
1. Generate the migration file
|
||||
|
||||
```bash
|
||||
superset db migrate -m 'add_metadata_column_to_annotation_model.py'
|
||||
superset db migrate -m 'add_metadata_column_to_annotation_model'
|
||||
```
|
||||
|
||||
This will generate a file in `migrations/version/{SHA}_this_will_be_in_the_migration_filename.py`.
|
||||
@@ -982,7 +1182,7 @@ Submissions will be considered for submission (or removal) on a case-by-case bas
|
||||
|
||||
When two DB migrations collide, you'll get an error message like this one:
|
||||
|
||||
```
|
||||
```text
|
||||
alembic.util.exc.CommandError: Multiple head revisions are present for
|
||||
given argument 'head'; please specify a specific target
|
||||
revision, '<branchname>@head' to narrow to a specific head,
|
||||
@@ -997,15 +1197,46 @@ To fix it:
|
||||
superset db heads
|
||||
```
|
||||
|
||||
This should list two or more migration hashes.
|
||||
This should list two or more migration hashes. E.g.
|
||||
|
||||
1. Create a new merge migration
|
||||
```bash
|
||||
1412ec1e5a7b (head)
|
||||
67da9ef1ef9c (head)
|
||||
```
|
||||
|
||||
2. Pick one of them as the parent revision, open the script for the other revision
|
||||
and update `Revises` and `down_revision` to the new parent revision. E.g.:
|
||||
|
||||
```diff
|
||||
--- a/67da9ef1ef9c_add_hide_left_bar_to_tabstate.py
|
||||
+++ b/67da9ef1ef9c_add_hide_left_bar_to_tabstate.py
|
||||
@@ -17,14 +17,14 @@
|
||||
"""add hide_left_bar to tabstate
|
||||
|
||||
Revision ID: 67da9ef1ef9c
|
||||
-Revises: c501b7c653a3
|
||||
+Revises: 1412ec1e5a7b
|
||||
Create Date: 2021-02-22 11:22:10.156942
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "67da9ef1ef9c"
|
||||
-down_revision = "c501b7c653a3"
|
||||
+down_revision = "1412ec1e5a7b"
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
```
|
||||
|
||||
Alternatively you may also run `superset db merge` to create a migration script
|
||||
just for merging the heads.
|
||||
|
||||
```bash
|
||||
superset db merge {HASH1} {HASH2}
|
||||
```
|
||||
|
||||
1. Upgrade the DB to the new checkpoint
|
||||
3. Upgrade the DB to the new checkpoint
|
||||
|
||||
```bash
|
||||
superset db upgrade
|
||||
@@ -1063,6 +1294,7 @@ The following configuration settings are available for async queries (see config
|
||||
- `GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT_FIREHOSE` - the maximum number of events for all users (FIFO eviction)
|
||||
- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_NAME` - the async query feature uses a [JWT](https://tools.ietf.org/html/rfc7519) cookie for authentication, this setting is the cookie's name
|
||||
- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_SECURE` - JWT cookie secure option
|
||||
- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_DOMAIN` - JWT cookie domain option ([see docs for set_cookie](https://tedboy.github.io/flask/interface_api.response_object.html#flask.Response.set_cookie))
|
||||
- `GLOBAL_ASYNC_QUERIES_JWT_SECRET` - JWT's use a secret key to sign and validate the contents. This value should be at least 32 bytes and have sufficient randomness for proper security
|
||||
- `GLOBAL_ASYNC_QUERIES_TRANSPORT` - currently the only available option is (HTTP) `polling`, but support for a WebSocket will be added in future versions
|
||||
- `GLOBAL_ASYNC_QUERIES_POLLING_DELAY` - the time (in ms) between polling requests
|
||||
|
||||
+37
-2
@@ -45,7 +45,10 @@ RUN cd /app \
|
||||
######################################################################
|
||||
# Node stage to deal with static asset construction
|
||||
######################################################################
|
||||
FROM node:12 AS superset-node
|
||||
FROM node:14 AS superset-node
|
||||
|
||||
ARG NPM_VER=7
|
||||
RUN npm install -g npm@${NPM_VER}
|
||||
|
||||
ARG NPM_BUILD_CMD="build"
|
||||
ENV BUILD_CMD=${NPM_BUILD_CMD}
|
||||
@@ -79,7 +82,7 @@ ENV LANG=C.UTF-8 \
|
||||
FLASK_APP="superset.app:create_app()" \
|
||||
PYTHONPATH="/app/pythonpath" \
|
||||
SUPERSET_HOME="/app/superset_home" \
|
||||
SUPERSET_PORT=8080
|
||||
SUPERSET_PORT=8088
|
||||
|
||||
RUN useradd --user-group --no-create-home --no-log-init --shell /bin/bash superset \
|
||||
&& mkdir -p ${SUPERSET_HOME} ${PYTHONPATH} \
|
||||
@@ -87,6 +90,7 @@ RUN useradd --user-group --no-create-home --no-log-init --shell /bin/bash supers
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
default-libmysqlclient-dev \
|
||||
libsasl2-modules-gssapi-mit \
|
||||
libpq-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
@@ -119,12 +123,43 @@ ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
|
||||
# Dev image...
|
||||
######################################################################
|
||||
FROM lean AS dev
|
||||
ARG GECKODRIVER_VERSION=v0.28.0
|
||||
ARG FIREFOX_VERSION=88.0
|
||||
|
||||
COPY ./requirements/*.txt ./docker/requirements-*.txt/ /app/requirements/
|
||||
|
||||
USER root
|
||||
|
||||
RUN apt-get update -y \
|
||||
&& apt-get install -y --no-install-recommends libnss3 libdbus-glib-1-2 libgtk-3-0 libx11-xcb1
|
||||
|
||||
# Install GeckoDriver WebDriver
|
||||
RUN wget https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O /tmp/geckodriver.tar.gz && \
|
||||
tar xvfz /tmp/geckodriver.tar.gz -C /tmp && \
|
||||
mv /tmp/geckodriver /usr/local/bin/geckodriver && \
|
||||
rm /tmp/geckodriver.tar.gz
|
||||
|
||||
# Install Firefox
|
||||
RUN wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 -O /opt/firefox.tar.bz2 && \
|
||||
tar xvf /opt/firefox.tar.bz2 -C /opt && \
|
||||
ln -s /opt/firefox/firefox /usr/local/bin/firefox
|
||||
|
||||
# Cache everything for dev purposes...
|
||||
RUN cd /app \
|
||||
&& pip install --no-cache -r requirements/docker.txt \
|
||||
&& pip install --no-cache -r requirements/requirements-local.txt || true
|
||||
USER superset
|
||||
|
||||
|
||||
######################################################################
|
||||
# CI image...
|
||||
######################################################################
|
||||
FROM lean AS ci
|
||||
|
||||
COPY --chown=superset ./docker/docker-bootstrap.sh /app/docker/
|
||||
COPY --chown=superset ./docker/docker-init.sh /app/docker/
|
||||
COPY --chown=superset ./docker/docker-ci.sh /app/docker/
|
||||
|
||||
RUN chmod a+x /app/docker/*.sh
|
||||
|
||||
CMD /app/docker/docker-ci.sh
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
.PHONY: install superset venv pre-commit
|
||||
|
||||
install: superset pre-commit
|
||||
|
||||
superset:
|
||||
# Install external dependencies
|
||||
pip install -r requirements/local.txt
|
||||
|
||||
# Install Superset in editable (development) mode
|
||||
pip install -e .
|
||||
|
||||
# Create an admin user in your metadata database
|
||||
superset fab create-admin
|
||||
|
||||
# Initialize the database
|
||||
superset db upgrade
|
||||
|
||||
# Create default roles and permissions
|
||||
superset init
|
||||
|
||||
# Load some data to play with
|
||||
superset load-examples
|
||||
|
||||
venv:
|
||||
# Create a virtual environment and activate it (recommended)
|
||||
python3 -m venv venv # setup a python3 virtualenv
|
||||
source venv/bin/activate
|
||||
|
||||
pre-commit:
|
||||
# setup pre commit dependencies
|
||||
pip3 install -r requirements/integration.txt
|
||||
pre-commit install
|
||||
@@ -17,11 +17,10 @@ specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
Superset
|
||||
=========
|
||||
# Superset
|
||||
|
||||
[](https://opensource.org/licenses/Apache-2.0)
|
||||

|
||||
[](https://github.com/apache/superset/tree/latest)
|
||||
[](https://github.com/apache/superset/actions)
|
||||
[](https://badge.fury.io/py/apache-superset)
|
||||
[](https://codecov.io/github/apache/superset)
|
||||
@@ -31,7 +30,7 @@ Superset
|
||||
[](https://david-dm.org/apache/superset?path=superset-frontend)
|
||||
|
||||
<img
|
||||
src="https://github.com/apache/superset/raw/master/superset-frontend/branding/superset-logo-horiz-apache.png"
|
||||
src="https://github.com/apache/superset/raw/master/superset-frontend/src/assets/branding/superset-logo-horiz-apache.png"
|
||||
alt="Superset"
|
||||
width="500"
|
||||
/>
|
||||
@@ -45,55 +44,53 @@ A modern, enterprise-ready business intelligence web application.
|
||||
[**Get Involved**](#get-involved) |
|
||||
[**Contributor Guide**](#contributor-guide) |
|
||||
[**Resources**](#resources) |
|
||||
[**Organizations Using Superset**](INTHEWILD.md)
|
||||
|
||||
[**Organizations Using Superset**](RESOURCES/INTHEWILD.md)
|
||||
|
||||
## Screenshots & Gifs
|
||||
|
||||
**Gallery**
|
||||
|
||||
<kbd><a href="https://superset.apache.org/gallery"><img title="Gallery" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/gallery.jpg"></a></kbd><br/>
|
||||
<kbd><a href="https://superset.apache.org/gallery"><img title="Gallery" src="superset-frontend/images/screenshots/gallery.jpg"/></a></kbd><br/>
|
||||
|
||||
**View Dashboards**
|
||||
|
||||
<kbd><img title="View Dashboards" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/slack_dash.jpg"></kbd><br/>
|
||||
<kbd><img title="View Dashboards" src="superset-frontend/images/screenshots/slack_dash.jpg"/></kbd><br/>
|
||||
|
||||
**Slice & dice your data**
|
||||
|
||||
<kbd><img title="Slice & dice your data" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/explore.jpg"></kbd><br/>
|
||||
<kbd><img title="Slice & dice your data" src="superset-frontend/images/screenshots/explore.jpg"/></kbd><br/>
|
||||
|
||||
**Query and visualize your data with SQL Lab**
|
||||
|
||||
<kbd><img title="SQL Lab" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/sql_lab.jpg"></kbd><br/>
|
||||
<kbd><img title="SQL Lab" src="superset-frontend/images/screenshots/sql_lab.jpg"/></kbd><br/>
|
||||
|
||||
**Visualize geospatial data with deck.gl**
|
||||
|
||||
<kbd><img title="Geospatial" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/geospatial_dash.jpg"></kbd><br/>
|
||||
<kbd><img title="Geospatial" src="superset-frontend/images/screenshots/geospatial_dash.jpg"/></kbd><br/>
|
||||
|
||||
**Choose from a wide array of visualizations**
|
||||
|
||||
<kbd><img title="Visualizations" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/explore_visualizations.jpg"></kbd><br/>
|
||||
|
||||
<kbd><img title="Visualizations" src="superset-frontend/images/screenshots/explore_visualizations.jpg"/></kbd><br/>
|
||||
|
||||
## Why Superset?
|
||||
|
||||
Superset provides:
|
||||
|
||||
* An intuitive interface for visualizing datasets and
|
||||
crafting interactive dashboards
|
||||
* A wide array of beautiful visualizations to showcase your data
|
||||
* Code-free visualization builder to extract and present datasets
|
||||
* A world-class SQL IDE for preparing data for visualization, including a rich metadata browser
|
||||
* A lightweight semantic layer which empowers data analysts to quickly define custom dimensions and metrics
|
||||
* Out-of-the-box support for most SQL-speaking databases
|
||||
* Seamless, in-memory asynchronous caching and queries
|
||||
* An extensible security model that allows configuration of very intricate rules on
|
||||
on who can access which product features and datasets.
|
||||
* Integration with major
|
||||
authentication backends (database, OpenID, LDAP, OAuth, REMOTE_USER, etc)
|
||||
* The ability to add custom visualization plugins
|
||||
* An API for programmatic customization
|
||||
* A cloud-native archiecture designed from the ground up for scale
|
||||
- An intuitive interface for visualizing datasets and
|
||||
crafting interactive dashboards
|
||||
- A wide array of beautiful visualizations to showcase your data
|
||||
- Code-free visualization builder to extract and present datasets
|
||||
- A world-class SQL IDE for preparing data for visualization, including a rich metadata browser
|
||||
- A lightweight semantic layer which empowers data analysts to quickly define custom dimensions and metrics
|
||||
- Out-of-the-box support for most SQL-speaking databases
|
||||
- Seamless, in-memory asynchronous caching and queries
|
||||
- An extensible security model that allows configuration of very intricate rules
|
||||
on who can access which product features and datasets.
|
||||
- Integration with major
|
||||
authentication backends (database, OpenID, LDAP, OAuth, REMOTE_USER, etc)
|
||||
- The ability to add custom visualization plugins
|
||||
- An API for programmatic customization
|
||||
- A cloud-native architecture designed from the ground up for scale
|
||||
|
||||
## Supported Databases
|
||||
|
||||
@@ -102,26 +99,27 @@ Superset can query data from any SQL-speaking datastore or data engine (e.g. Pre
|
||||
Here are some of the major database solutions that are supported:
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/redshift.png" alt="redshift" border="0" width="106" height="41"/>
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/google-biquery.png" alt="google-biquery" border="0" width="114" height="43"/>
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/snowflake.png" alt="snowflake" border="0" width="152" height="46"/>
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/presto.png" alt="presto" border="0" width="152" height="46"/>
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/druid.png" alt="druid" border="0" width="135" height="37" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/postgresql.png" alt="postgresql" border="0" width="132" height="81" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/mysql.png" alt="mysql" border="0" width="119" height="62" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/mssql-server.png" alt="mssql-server" border="0" width="93" height="74" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/db2.png" alt="db2" border="0" width="62" height="62" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/sqlite.png" alt="sqlite" border="0" width="102" height="45" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/sybase.png" alt="sybase" border="0" width="128" height="47" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/mariadb.png" alt="mariadb" border="0" width="83" height="63" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/vertica.png" alt="vertica" border="0" width="128" height="40" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/oracle.png" alt="oracle" border="0" width="121" height="66" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/firebird.png" alt="firebird" border="0" width="86" height="56" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/greenplum.png" alt="greenplum" border="0" width="140" height="45" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/clickhouse.png" alt="clickhouse" border="0" width="133" height="34" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/exasol.png" alt="exasol" border="0" width="106" height="59" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/monet-db.png" alt="monet-db" border="0" width="106" height="46" />
|
||||
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/apache-kylin.png" alt="apache-kylin" border="0" width="56" height="64"/>
|
||||
<img src="superset-frontend/images/redshift.png" alt="redshift" border="0" width="106" height="41"/>
|
||||
<img src="superset-frontend/images/google-biquery.png" alt="google-biquery" border="0" width="114" height="43"/>
|
||||
<img src="superset-frontend/images/snowflake.png" alt="snowflake" border="0" width="152" height="46"/>
|
||||
<img src="superset-frontend/images/trino.png" alt="trino" border="0" width="46" height="46"/>
|
||||
<img src="superset-frontend/images/presto.png" alt="presto" border="0" width="152" height="46"/>
|
||||
<img src="superset-frontend/images/druid.png" alt="druid" border="0" width="135" height="37" />
|
||||
<img src="superset-frontend/images/postgresql.png" alt="postgresql" border="0" width="132" height="81" />
|
||||
<img src="superset-frontend/images/mysql.png" alt="mysql" border="0" width="119" height="62" />
|
||||
<img src="superset-frontend/images/mssql-server.png" alt="mssql-server" border="0" width="93" height="74" />
|
||||
<img src="superset-frontend/images/db2.png" alt="db2" border="0" width="62" height="62" />
|
||||
<img src="superset-frontend/images/sqlite.png" alt="sqlite" border="0" width="102" height="45" />
|
||||
<img src="superset-frontend/images/sybase.png" alt="sybase" border="0" width="128" height="47" />
|
||||
<img src="superset-frontend/images/mariadb.png" alt="mariadb" border="0" width="83" height="63" />
|
||||
<img src="superset-frontend/images/vertica.png" alt="vertica" border="0" width="128" height="40" />
|
||||
<img src="superset-frontend/images/oracle.png" alt="oracle" border="0" width="121" height="66" />
|
||||
<img src="superset-frontend/images/firebird.png" alt="firebird" border="0" width="86" height="56" />
|
||||
<img src="superset-frontend/images/greenplum.png" alt="greenplum" border="0" width="140" height="45" />
|
||||
<img src="superset-frontend/images/clickhouse.png" alt="clickhouse" border="0" width="133" height="34" />
|
||||
<img src="superset-frontend/images/exasol.png" alt="exasol" border="0" width="106" height="59" />
|
||||
<img src="superset-frontend/images/monet-db.png" alt="monet-db" border="0" width="106" height="46" />
|
||||
<img src="superset-frontend/images/apache-kylin.png" alt="apache-kylin" border="0" width="56" height="64"/>
|
||||
<img src="superset-frontend/images/hologres.png" alt="hologres" border="0" width="71" height="64"/>
|
||||
</p>
|
||||
|
||||
@@ -130,18 +128,16 @@ Here are some of the major database solutions that are supported:
|
||||
|
||||
Want to add support for your datastore or data engine? Read more [here](https://superset.apache.org/docs/frequently-asked-questions#does-superset-work-with-insert-database-engine-here) about the technical requirements.
|
||||
|
||||
|
||||
## Installation and Configuration
|
||||
|
||||
[Extended documentation for Superset](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose)
|
||||
|
||||
## Get Involved
|
||||
|
||||
* Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
|
||||
* [Join our community's Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
|
||||
and please read our [Slack Community Guidelines](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)
|
||||
|
||||
- Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
|
||||
- [Join our community's Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-l5f5e0av-fyYu8tlfdqbMdz_sPLwUqQ)
|
||||
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)
|
||||
|
||||
## Contributor Guide
|
||||
|
||||
@@ -150,29 +146,28 @@ Interested in contributing? Check out our
|
||||
to find resources around contributing along with a detailed guide on
|
||||
how to set up a development environment.
|
||||
|
||||
|
||||
## Resources
|
||||
|
||||
* Superset 1.0
|
||||
* [Superset 1.0 Milestone](https://superset.apache.org/docs/version-one)
|
||||
* [Superset 1.0 Release Notes](https://github.com/apache/superset/tree/master/RELEASING/release-notes-1-0)
|
||||
* [Presentation on Superset 1.0 Public Roadmap](https://docs.google.com/presentation/d/1FGgyI8tLWLUPSQ5eEno78bylLfobj9O2W4yoUoFYHH8/edit#slide=id.g9c182b81b9_1_0)
|
||||
* [Public Superset Roadmap](https://github.com/apache-superset/superset-roadmap/projects/1)
|
||||
* Superset 101 -- Getting Started Guide (From [Preset Blog](https://preset.io/blog/))
|
||||
* [Installing Apache Superset Locally](https://preset.io/blog/2020-05-11-getting-started-installing-superset/)
|
||||
* [Installing Database Drivers](https://preset.io/blog/2020-05-18-install-db-drivers/)
|
||||
* [Connect Superset To Google Sheets](https://preset.io/blog/2020-06-01-connect-superset-google-sheets/)
|
||||
* [Create Your First Chart](https://preset.io/blog/2020-06-08-first-chart/)
|
||||
* [Create Time Series Charts](https://preset.io/blog/2020-06-26-timeseries-chart/)
|
||||
* [Documentation for End-Users (by Preset)](https://docs.preset.io/)
|
||||
* [Docker image](https://hub.docker.com/r/apache/superset)
|
||||
* [Recordings of Community Events](https://www.youtube.com/channel/UCMuwrvBsg_jjI2gLcm04R0g)
|
||||
* [May 2020: Virtual Meetup. Topics: 0.36 Overview, Committers Self-Intro, Roadmap](https://www.youtube.com/watch?v=tXGDmqjmcTs&t=20s)
|
||||
* [July 2020: Virtual Meetup. Topics: Visualization Plugins, 0.37 Preview, Demo](https://www.youtube.com/watch?v=f6up5x_iRbI)
|
||||
* [November 2020: Virtual Meetup. Topics: Superset 1.0 & the Roadmap](https://www.youtube.com/watch?v=GwtWRUSEjk4)
|
||||
* [November 2020: Live Demo. Topic: Superset Semantic Layer](https://www.youtube.com/watch?v=8VL4ZPLFUYI)
|
||||
* [December 2020: Live Demo. Topic: Annotations](https://www.youtube.com/watch?v=Yk6bKgphj1Q)
|
||||
* Custom Visualizations
|
||||
* [Building Custom Viz Plugins](https://superset.apache.org/docs/installation/building-custom-viz-plugins)
|
||||
* [Managing and Deploying Custom Viz Plugins](https://medium.com/nmc-techblog/apache-superset-manage-custom-viz-plugins-in-production-9fde1a708e55)
|
||||
* [Superset API](https://superset.apache.org/docs/rest-api)
|
||||
- Superset 1.0
|
||||
- [Superset 1.0 Milestone](https://superset.apache.org/docs/version-one)
|
||||
- [Superset 1.0 Release Notes](https://github.com/apache/superset/tree/master/RELEASING/release-notes-1-0)
|
||||
- [Presentation on Superset 1.0 Public Roadmap](https://docs.google.com/presentation/d/1FGgyI8tLWLUPSQ5eEno78bylLfobj9O2W4yoUoFYHH8/edit#slide=id.g9c182b81b9_1_0)
|
||||
- [Public Superset Roadmap](https://github.com/apache-superset/superset-roadmap/projects/1)
|
||||
- Superset 101 -- Getting Started Guide (From [Preset Blog](https://preset.io/blog/))
|
||||
- [Installing Apache Superset Locally](https://preset.io/blog/2020-05-11-getting-started-installing-superset/)
|
||||
- [Installing Database Drivers](https://preset.io/blog/2020-05-18-install-db-drivers/)
|
||||
- [Connect Superset To Google Sheets](https://preset.io/blog/2020-06-01-connect-superset-google-sheets/)
|
||||
- [Create Your First Chart](https://preset.io/blog/2020-06-08-first-chart/)
|
||||
- [Create Time Series Charts](https://preset.io/blog/2020-06-26-timeseries-chart/)
|
||||
- [Documentation for End-Users (by Preset)](https://docs.preset.io/)
|
||||
- [Docker image](https://hub.docker.com/r/apache/superset)
|
||||
- [Recordings of Community Events](https://www.youtube.com/channel/UCMuwrvBsg_jjI2gLcm04R0g)
|
||||
- [May 2020: Virtual Meetup. Topics: 0.36 Overview, Committers Self-Intro, Roadmap](https://www.youtube.com/watch?v=tXGDmqjmcTs&t=20s)
|
||||
- [July 2020: Virtual Meetup. Topics: Visualization Plugins, 0.37 Preview, Demo](https://www.youtube.com/watch?v=f6up5x_iRbI)
|
||||
- [November 2020: Virtual Meetup. Topics: Superset 1.0 & the Roadmap](https://www.youtube.com/watch?v=GwtWRUSEjk4)
|
||||
- [November 2020: Live Demo. Topic: Superset Semantic Layer](https://www.youtube.com/watch?v=8VL4ZPLFUYI)
|
||||
- [December 2020: Live Demo. Topic: Annotations](https://www.youtube.com/watch?v=Yk6bKgphj1Q)
|
||||
- Custom Visualizations
|
||||
- [Building Custom Viz Plugins](https://superset.apache.org/docs/installation/building-custom-viz-plugins)
|
||||
- [Managing and Deploying Custom Viz Plugins](https://medium.com/nmc-techblog/apache-superset-manage-custom-viz-plugins-in-production-9fde1a708e55)
|
||||
- [Superset API](https://superset.apache.org/docs/rest-api)
|
||||
|
||||
@@ -126,6 +126,12 @@ Example:
|
||||
python changelog.py --previous_version 0.37 --current_version 0.38 changelog
|
||||
```
|
||||
|
||||
You can get a list of pull requests with labels started with blocking, risk, hold, revert and security by using the parameter `--risk`.
|
||||
Example:
|
||||
```bash
|
||||
python changelog.py --previous_version 0.37 --current_version 0.38 changelog --access_token {GITHUB_TOKEN} --risk
|
||||
```
|
||||
|
||||
The script will checkout both branches and compare all the PR's, copy the output and paste it on the `CHANGELOG.md`
|
||||
|
||||
Then, in `UPDATING.md`, a file that contains a list of notifications around
|
||||
|
||||
+112
-11
@@ -26,12 +26,14 @@ from typing import Any, Dict, Iterator, List, Optional, Union
|
||||
import click
|
||||
|
||||
try:
|
||||
from github import BadCredentialsException, Github, PullRequest
|
||||
from github import BadCredentialsException, Github, PullRequest, Repository
|
||||
except ModuleNotFoundError:
|
||||
print("PyGithub is a required package for this script")
|
||||
exit(1)
|
||||
|
||||
SUPERSET_REPO = "apache/superset"
|
||||
SUPERSET_PULL_REQUEST_TYPES = r"^(fix|feat|chore|refactor|docs|build|ci|/gmi)"
|
||||
SUPERSET_RISKY_LABELS = r"^(blocking|risk|hold|revert|security vulnerability)"
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -65,15 +67,22 @@ class GitChangeLog:
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self, version: str, logs: List[GitLog], access_token: Optional[str] = None
|
||||
self,
|
||||
version: str,
|
||||
logs: List[GitLog],
|
||||
access_token: Optional[str] = None,
|
||||
risk: Optional[bool] = False,
|
||||
) -> None:
|
||||
self._version = version
|
||||
self._logs = logs
|
||||
self._pr_logs_with_details: Dict[int, Dict[str, Any]] = {}
|
||||
self._github_login_cache: Dict[str, Optional[str]] = {}
|
||||
self._github_prs: Dict[int, Any] = {}
|
||||
self._wait = 10
|
||||
github_token = access_token or os.environ.get("GITHUB_TOKEN")
|
||||
self._github = Github(github_token)
|
||||
self._superset_repo = ""
|
||||
self._show_risk = risk
|
||||
self._superset_repo: Repository = None
|
||||
|
||||
def _fetch_github_pr(self, pr_number: int) -> PullRequest:
|
||||
"""
|
||||
@@ -81,6 +90,11 @@ class GitChangeLog:
|
||||
"""
|
||||
try:
|
||||
github_repo = self._github.get_repo(SUPERSET_REPO)
|
||||
self._superset_repo = github_repo
|
||||
pull_request = self._github_prs.get(pr_number)
|
||||
if not pull_request:
|
||||
pull_request = github_repo.get_pull(pr_number)
|
||||
self._github_prs[pr_number] = pull_request
|
||||
except BadCredentialsException as ex:
|
||||
print(
|
||||
f"Bad credentials to github provided"
|
||||
@@ -88,7 +102,7 @@ class GitChangeLog:
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
return github_repo.get_pull(pr_number)
|
||||
return pull_request
|
||||
|
||||
def _get_github_login(self, git_log: GitLog) -> Optional[str]:
|
||||
"""
|
||||
@@ -108,21 +122,102 @@ class GitChangeLog:
|
||||
self._github_login_cache[author_name] = github_login
|
||||
return github_login
|
||||
|
||||
def _has_commit_migrations(self, git_sha: str) -> bool:
|
||||
commit = self._superset_repo.get_commit(sha=git_sha)
|
||||
return any(
|
||||
"superset/migrations/versions/" in file.filename for file in commit.files
|
||||
)
|
||||
|
||||
def _get_pull_request_details(self, git_log: GitLog) -> Dict[str, Any]:
|
||||
pr_number = git_log.pr_number
|
||||
if pr_number:
|
||||
detail = self._pr_logs_with_details.get(pr_number)
|
||||
if detail:
|
||||
return detail
|
||||
pr_info = self._fetch_github_pr(pr_number)
|
||||
|
||||
has_migrations = self._has_commit_migrations(git_log.sha)
|
||||
title = pr_info.title if pr_info else git_log.message
|
||||
pr_type = re.match(SUPERSET_PULL_REQUEST_TYPES, title)
|
||||
if pr_type:
|
||||
pr_type = pr_type.group().strip('"')
|
||||
|
||||
labels = (" | ").join([label.name for label in pr_info.labels])
|
||||
is_risky = self._is_risk_pull_request(pr_info.labels)
|
||||
detail = {
|
||||
"id": pr_number,
|
||||
"has_migrations": has_migrations,
|
||||
"labels": labels,
|
||||
"title": title,
|
||||
"type": pr_type,
|
||||
"is_risky": is_risky or has_migrations,
|
||||
}
|
||||
|
||||
if pr_number:
|
||||
self._pr_logs_with_details[pr_number] = detail
|
||||
|
||||
return detail
|
||||
|
||||
def _is_risk_pull_request(self, labels: List[Any]) -> bool:
|
||||
for label in labels:
|
||||
risk_label = re.match(SUPERSET_RISKY_LABELS, label.name)
|
||||
if risk_label is not None:
|
||||
return True
|
||||
return False
|
||||
|
||||
def _get_changelog_version_head(self) -> str:
|
||||
return f"### {self._version} ({self._logs[0].time})"
|
||||
|
||||
def _parse_change_log(
|
||||
self, changelog: Dict[str, str], pr_info: Dict[str, str], github_login: str,
|
||||
):
|
||||
formatted_pr = (
|
||||
f"- [#{pr_info.get('id')}]"
|
||||
f"(https://github.com/{SUPERSET_REPO}/pull/{pr_info.get('id')}) "
|
||||
f"{pr_info.get('title')} (@{github_login})\n"
|
||||
)
|
||||
if pr_info.get("has_migrations"):
|
||||
changelog["Database Migrations"] += formatted_pr
|
||||
elif pr_info.get("type") == "fix":
|
||||
changelog["Fixes"] += formatted_pr
|
||||
elif pr_info.get("type") == "feat":
|
||||
changelog["Features"] += formatted_pr
|
||||
else:
|
||||
changelog["Others"] += formatted_pr
|
||||
|
||||
def __repr__(self) -> str:
|
||||
result = f"\n{self._get_changelog_version_head()}\n"
|
||||
changelog = {
|
||||
"Database Migrations": "\n",
|
||||
"Features": "\n",
|
||||
"Fixes": "\n",
|
||||
"Others": "\n",
|
||||
}
|
||||
for i, log in enumerate(self._logs):
|
||||
github_login = self._get_github_login(log)
|
||||
pr_info = self._get_pull_request_details(log)
|
||||
|
||||
if not github_login:
|
||||
github_login = log.author
|
||||
result = result + (
|
||||
f"- [#{log.pr_number}]"
|
||||
f"(https://github.com/{SUPERSET_REPO}/pull/{log.pr_number}) "
|
||||
f"{log.message} (@{github_login})\n"
|
||||
)
|
||||
|
||||
if self._show_risk:
|
||||
if pr_info.get("is_risky"):
|
||||
result += (
|
||||
f"- [#{log.pr_number}]"
|
||||
f"(https://github.com/{SUPERSET_REPO}/pull/{log.pr_number}) "
|
||||
f"{pr_info.get('title')} (@{github_login}) "
|
||||
f"{pr_info.get('labels')} \n"
|
||||
)
|
||||
else:
|
||||
self._parse_change_log(changelog, pr_info, github_login)
|
||||
|
||||
print(f"\r {i}/{len(self._logs)}", end="", flush=True)
|
||||
|
||||
if self._show_risk:
|
||||
return result
|
||||
|
||||
for key in changelog:
|
||||
result += f"**{key}** {changelog[key]}\n"
|
||||
return result
|
||||
|
||||
def __iter__(self) -> Iterator[Dict[str, Any]]:
|
||||
@@ -269,14 +364,20 @@ def compare(base_parameters: BaseParameters) -> None:
|
||||
help="The github access token,"
|
||||
" if not provided will try to fetch from GITHUB_TOKEN env var",
|
||||
)
|
||||
@click.option("--risk", is_flag=True, help="show all pull requests with risky labels")
|
||||
@click.pass_obj
|
||||
def change_log(base_parameters: BaseParameters, csv: str, access_token: str) -> None:
|
||||
def change_log(
|
||||
base_parameters: BaseParameters, csv: str, access_token: str, risk: bool
|
||||
) -> None:
|
||||
""" Outputs a changelog (by PR) """
|
||||
previous_logs = base_parameters.previous_logs
|
||||
current_logs = base_parameters.current_logs
|
||||
previous_diff_logs = previous_logs.diff(current_logs)
|
||||
logs = GitChangeLog(
|
||||
current_logs.git_ref, previous_diff_logs[::-1], access_token=access_token
|
||||
current_logs.git_ref,
|
||||
previous_diff_logs[::-1],
|
||||
access_token=access_token,
|
||||
risk=risk,
|
||||
)
|
||||
if csv:
|
||||
with open(csv, "w") as csv_file:
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
|
||||
# Release Notes for Superset 1.1.0
|
||||
|
||||
Superset 1.1.0 continues to build on the [1.0](https://github.com/apache/superset/blob/master/RELEASING/release-notes-1-0/README.md) release with big improvements to user experience, security, dashboard level access, and database connectivity.
|
||||
|
||||
- [**User Experience**](#user-experience)
|
||||
- [**Dashboard Level Security**](#dashboard-level-security)
|
||||
- [**Database Connectivity**](#database-connectivity)
|
||||
- [**PR Highlights**](#pr-highlights)
|
||||
- [**Breaking Changes and Full Changelog**](#breaking-changes-and-full-changelog)
|
||||
|
||||
# User Experience
|
||||
|
||||
In general, the quality, usability, and aesthetics of the Superset user experience continues to develop in the direction of [SIP-34](https://github.com/apache/superset/issues/8976) and more tests have been added to ui components to ensure usability is maintained.
|
||||
|
||||
The migration to Apache ECharts continues with the addition of a [new force-directed graph](https://github.com/apache/superset/pull/13111).
|
||||
|
||||

|
||||
|
||||
The ECharts library included with Superset was also bumped to 5.0.2, which includes some [fixes to pie charts.](https://github.com/apache/superset/pull/13052) The overall improvement of chart options and quality can be expected to continue in future releases. New 'sort by' controls have also been [added](https://github.com/apache/superset/pull/13049) to [many charts](https://github.com/apache/superset/pull/13057).
|
||||
|
||||
The dashboard native filter feature, [while still behind a feature flag in this release,](https://github.com/apache/superset/blob/master/RELEASING/release-notes-1-0/README.md#feature-flags) has been improved and is ready to test out.
|
||||
|
||||

|
||||
|
||||
Since the 1.0 release, we have seen a surge of support from the community around updating Superset's [documentation](https://superset.apache.org/docs/intro) and adding more tests to the UI. Thanks to all who contributed in this area. This is what open-source software is all about!
|
||||
|
||||
# Dashboard Level Security
|
||||
|
||||
Dashboard providers in an organization with many subgroups need the ability manage user access to dashboards and different levels of permissions (read, write, granter, owner). Improving dashboard level access was proposed (and approved) in [SIP-51](https://github.com/apache/superset/issues/10408).
|
||||
|
||||

|
||||
|
||||
In 1.1, some key steps were taken towards the vision laid out in SIP-51. **Note that this functionality is still hidden behind feature flags and is an active area of development.** You can view a list of relevant PR's in [PR Highlights](#pr-highlights)
|
||||
|
||||
|
||||
# Database Connectivity
|
||||
|
||||
Superset is only as good as the databases it can query. This release saw the expanded support of existing databases and foundational support for new databases.
|
||||
|
||||
- [Opendistro](https://github.com/apache/superset/pull/12602)
|
||||
- [Trino](https://github.com/apache/superset/pull/13105)
|
||||
- [CrateDB](https://github.com/apache/superset/pull/13152/files)
|
||||
- [Apache Pinot](https://github.com/apache/superset/pull/13163)
|
||||
- [Presto](https://github.com/apache/superset/pull/13214)
|
||||
- [BigQuery](https://github.com/apache/superset/pull/12581)
|
||||
- [Postgres](https://github.com/apache/superset/pull/11720)
|
||||
- [Google Sheets](https://github.com/apache/superset/pull/13185)
|
||||
- [Athena](https://github.com/apache/superset/pull/13201)
|
||||
|
||||
# PR Highlights
|
||||
|
||||
**Progress On Dashboard Native Filters**
|
||||
|
||||
- feat(chart-data): add rowcount, timegrain and column result types (#[13271](https://github.com/apache/superset/pull/13271))
|
||||
- feat(native-filters): enable filter indicator and make datasource optional (#[13148](https://github.com/apache/superset/pull/13148))
|
||||
- feat(native-filters): hide filterBar and toggle icon when in editMode (#[13108](https://github.com/apache/superset/pull/13108))
|
||||
- feat(native-filters): add storybook entry for select filter (#[13005](https://github.com/apache/superset/pull/13005))
|
||||
- feat(native-filters): Time native filter (#[12992](https://github.com/apache/superset/pull/12992))
|
||||
- feat(native-filters): Add defaultValue for Native filters modal (#[12199](https://github.com/apache/superset/pull/12199))
|
||||
- feat(native-filters): apply scoping of native filters to dashboard (#[12716](https://github.com/apache/superset/pull/12716))
|
||||
|
||||
**Progress On Dashboard Level Access**
|
||||
|
||||
- feat(dashboard-rbac): dashboard lists (#[12680](https://github.com/apache/superset/pull/12680))
|
||||
- feat(dashboard-rbac): add support for related roles (#[13035](https://github.com/apache/superset/pull/13035))
|
||||
- feat(dashboard-rbac): dashboards API support for roles create/update + roles validation (#[12865](https://github.com/apache/superset/pull/12865))
|
||||
- feat(dashboard-rbac): `dashboard_view` access enforcement (#[12875](https://github.com/apache/superset/pull/12875))
|
||||
|
||||
**Improvements to Explore**
|
||||
|
||||
- feat: Add sort by metric for charts with multiple metrics (#[13057](https://github.com/apache/superset/pull/13057))
|
||||
- feat: add sort_by_metric for charts with single metric (#[13058](https://github.com/apache/superset/pull/13058))
|
||||
- feat: Add sort by for dist bar chart (#[13049](https://github.com/apache/superset/pull/13049))
|
||||
- feat: reset metrics on dataset change (#[12782](https://github.com/apache/superset/pull/12782))
|
||||
- feat: clear search on dataset change (#[12909](https://github.com/apache/superset/pull/12909))
|
||||
- feat: default timepicker to last week when dataset is changed (#[12609](https://github.com/apache/superset/pull/12609))
|
||||
|
||||
**Improvements to Developer Experience**
|
||||
|
||||
- chore: add non-dev docker-compose workflow (#[13143](https://github.com/apache/superset/pull/13143))
|
||||
- feat(style-theme): add support for custom superset themes (#[12858](https://github.com/apache/superset/pull/12858))
|
||||
- feat: Move SQLAlchemy url reference to config (#[13182](https://github.com/apache/superset/pull/13182))
|
||||
- feat(helm): Evaluate configOverrides as templates (#[13130](https://github.com/apache/superset/pull/13130))
|
||||
- feat(helm): Helm template for Celery beat (for reporting and alerting) (#[13116](https://github.com/apache/superset/pull/13116))
|
||||
- feat: Custom superset_config.py + secret envs (#[13096](https://github.com/apache/superset/pull/13096))
|
||||
- feat: Force pod restart on config changes (#[13056](https://github.com/apache/superset/pull/13056))
|
||||
- feat: add separate endpoint to fetch function names for autocomplete (#[12840](https://github.com/apache/superset/pull/12840))
|
||||
- feat: request ids on API related endpoints (#[12663](https://github.com/apache/superset/pull/12663))
|
||||
- feat: Adding option to `set_database_uri` CLI command (#[12740](https://github.com/apache/superset/pull/12740))
|
||||
- feat: add decorator to guard public APIs (#[12635](https://github.com/apache/superset/pull/12635))
|
||||
|
||||
## Breaking Changes and Full Changelog
|
||||
|
||||
- To see the complete changelog in this release, head to [CHANGELOG.MD](https://github.com/apache/superset/blob/master/CHANGELOG.md).
|
||||
- You can find a list of backwards incompatible changes [here](https://github.com/apache/superset/blob/3d103e66fcaee42a6b4a42b2638e13d5e2208c3b/UPDATING.md).
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 329 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 231 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 312 KiB |
@@ -0,0 +1,65 @@
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
# Superset Feature Flags
|
||||
This is a list of the current Superset optional features. See config.py for default values. These features can be turned on/off by setting your preferred values in superset_config.py to True/False respectively
|
||||
|
||||
## In Development
|
||||
These features are considered **unfinished** and should only be used on development environments.
|
||||
|
||||
- CLIENT_CACHE
|
||||
- DASHBOARD_CACHE
|
||||
- DASHBOARD_NATIVE_FILTERS_SET
|
||||
- DASHBOARD_RBAC
|
||||
- DISABLE_DATASET_SOURCE_EDIT
|
||||
- ENABLE_EXPLORE_JSON_CSRF_PROTECTION
|
||||
- KV_STORE
|
||||
- PRESTO_EXPAND_DATA
|
||||
- REMOVE_SLICE_LEVEL_LABEL_COLORS
|
||||
- SHARE_QUERIES_VIA_KV_STORE
|
||||
- TAGGING_SYSTEM
|
||||
|
||||
## In Testing
|
||||
These features are **finished** but currently being tested. They are usable, but may still contain some bugs.
|
||||
|
||||
- ALERT_REPORTS: [(docs)](https://superset.apache.org/docs/installation/alerts-reports)
|
||||
- DYNAMIC_PLUGINS: [(docs)](https://superset.apache.org/docs/installation/running-on-kubernetes)
|
||||
- DASHBOARD_NATIVE_FILTERS
|
||||
- GLOBAL_ASYNC_QUERIES [(docs)](https://github.com/apache/superset/blob/master/CONTRIBUTING.md#async-chart-queries)
|
||||
- OMNIBAR
|
||||
- VERSIONED_EXPORT
|
||||
|
||||
## Stable
|
||||
These features flags are **safe for production** and have been tested.
|
||||
|
||||
- DASHBOARD_CROSS_FILTERS
|
||||
- ESCAPE_MARKDOWN_HTML
|
||||
- ENABLE_TEMPLATE_PROCESSING
|
||||
- LISTVIEWS_DEFAULT_CARD_VIEW
|
||||
- ROW_LEVEL_SECURITY
|
||||
- SCHEDULED_QUERIES [(docs)](https://superset.apache.org/docs/installation/alerts-reports)
|
||||
- SQL_VALIDATORS_BY_ENGINE [(docs)](https://superset.apache.org/docs/installation/sql-templating)
|
||||
- SQLLAB_BACKEND_PERSISTENCE
|
||||
- THUMBNAILS [(docs)](https://superset.apache.org/docs/installation/cache)
|
||||
|
||||
## Deprecated Flags
|
||||
These features flags currently default to True and **will be removed in a future major release**. For this current release you can turn them off by setting your config to False, but it is advised to remove or set these flags in your local configuration to **True** so that you do not experience any unexpected changes in a future release.
|
||||
|
||||
- ALLOW_DASHBOARD_DOMAIN_SHARDING
|
||||
- DISPLAY_MARKDOWN_HTML
|
||||
- ENABLE_REACT_CRUD_VIEWS
|
||||
+40
-3
@@ -22,11 +22,48 @@ under the License.
|
||||
This file documents any backwards-incompatible changes in Superset and
|
||||
assists people when migrating to a new version.
|
||||
|
||||
## Next
|
||||
### Breaking Changes
|
||||
### Potential Downtime
|
||||
## 1.2.0
|
||||
|
||||
### Deprecations
|
||||
|
||||
- [13440](https://github.com/apache/superset/pull/13440): Dashboard/Charts reports and old Alerts is deprecated. The following config keys are deprecated:
|
||||
- ENABLE_ALERTS
|
||||
- SCHEDULED_EMAIL_DEBUG_MODE
|
||||
- EMAIL_REPORTS_CRON_RESOLUTION
|
||||
- EMAIL_ASYNC_TIME_LIMIT_SEC
|
||||
- EMAIL_REPORT_BCC_ADDRESS
|
||||
- EMAIL_REPORTS_USER
|
||||
|
||||
### 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.
|
||||
- [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
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- This is the first release since we adopted semantic versioning ([SIP-57](https://github.com/apache/superset/issues/12566)). There are no breaking changes in 1.1.0 since this is a minor release.
|
||||
|
||||
### Potential Downtime
|
||||
|
||||
- [13111](https://github.com/apache/superset/pull/13111) has a database migration that replaces `directed_force` charts with newer `graph_chart` charts based on Apache ECharts.
|
||||
- [13216](https://github.com/apache/superset/pull/13216) adds a UUID column to models that are missing it. The original migration script that added the column would incorrectly complete when the column couldn't be added, resulting in a broken schema. The script is optimized for MySQL and Postgres, so depending on the database and the number of objects this migration might take considerable time.
|
||||
- [12960](https://github.com/apache/superset/pull/12960) populates the granularity parameter in existing charts. Depending on the number of charts without a `granularity` or `granularity_sqla param` this might take considerable time.
|
||||
- [13052](https://github.com/apache/superset/pull/13052) updates the label in existing pie charts, setting `label_type` from `pie_label_type`. Depending on the number of pie charts this might take considerable time.
|
||||
- [12680](https://github.com/apache/superset/pull/12680) creates a new table, `dashboard_roles`, for role based dashboard level access.
|
||||
- [12552](https://github.com/apache/superset/pull/12552) updates charts that have the time range defined using "until" and "since". Depending on the number of charts this might take considerable time.
|
||||
|
||||
### Deprecations
|
||||
|
||||
- [12552](https://github.com/apache/superset/pull/12552) removes the use of unclear time offsets, eg, "30 days". An error message is displayed if the user doesn't specify "ago" or "later", instructing the user of the correct format.
|
||||
- [12627](https://github.com/apache/superset/pull/12627) deprecates the legacy alerts module.
|
||||
|
||||
### Other
|
||||
|
||||
- [shillelagh](https://github.com/betodealmeida/shillelagh/) is now the recommended module to connect Superset to Google Spreadsheets since it's more robust and has extensive test coverage. You should uninstall the `gsheetsdb` module and install the `shillelagh` module in its place. Shillelagh is a drop-in replacement, so no modifications are needed to be done on existing queries, datasets, or charts.
|
||||
|
||||
## 1.0.0
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
x-superset-image: &superset-image apache/superset: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
|
||||
- ./docker:/app/docker
|
||||
- superset_home:/app/superset_home
|
||||
|
||||
version: "3.7"
|
||||
services:
|
||||
redis:
|
||||
image: redis:latest
|
||||
container_name: superset_cache
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- redis:/data
|
||||
|
||||
db:
|
||||
env_file: docker/.env
|
||||
image: postgres:10
|
||||
container_name: superset_db
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- db_home:/var/lib/postgresql/data
|
||||
|
||||
superset:
|
||||
env_file: docker/.env-non-dev
|
||||
image: *superset-image
|
||||
container_name: superset_app
|
||||
command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
|
||||
user: "root"
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 8088:8088
|
||||
depends_on: *superset-depends-on
|
||||
volumes: *superset-volumes
|
||||
|
||||
superset-init:
|
||||
image: *superset-image
|
||||
container_name: superset_init
|
||||
command: ["/app/docker/docker-init.sh"]
|
||||
env_file: docker/.env-non-dev
|
||||
depends_on: *superset-depends-on
|
||||
user: "root"
|
||||
volumes: *superset-volumes
|
||||
|
||||
superset-worker:
|
||||
image: *superset-image
|
||||
container_name: superset_worker
|
||||
command: ["/app/docker/docker-bootstrap.sh", "worker"]
|
||||
env_file: docker/.env-non-dev
|
||||
restart: unless-stopped
|
||||
depends_on: *superset-depends-on
|
||||
user: "root"
|
||||
volumes: *superset-volumes
|
||||
|
||||
superset-worker-beat:
|
||||
image: *superset-image
|
||||
container_name: superset_worker_beat
|
||||
command: ["/app/docker/docker-bootstrap.sh", "beat"]
|
||||
env_file: docker/.env-non-dev
|
||||
restart: unless-stopped
|
||||
depends_on: *superset-depends-on
|
||||
user: "root"
|
||||
volumes: *superset-volumes
|
||||
|
||||
volumes:
|
||||
superset_home:
|
||||
external: false
|
||||
db_home:
|
||||
external: false
|
||||
redis:
|
||||
external: false
|
||||
+12
-2
@@ -29,7 +29,7 @@ x-superset-volumes: &superset-volumes
|
||||
version: "3.7"
|
||||
services:
|
||||
redis:
|
||||
image: redis:3.2
|
||||
image: redis:latest
|
||||
container_name: superset_cache
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
@@ -73,7 +73,7 @@ services:
|
||||
CYPRESS_CONFIG: "${CYPRESS_CONFIG}"
|
||||
|
||||
superset-node:
|
||||
image: node:12
|
||||
image: node:14
|
||||
container_name: superset_node
|
||||
command: ["/app/docker/docker-frontend.sh"]
|
||||
env_file: docker/.env
|
||||
@@ -90,6 +90,16 @@ services:
|
||||
user: "root"
|
||||
volumes: *superset-volumes
|
||||
|
||||
superset-worker-beat:
|
||||
image: *superset-image
|
||||
container_name: superset_worker_beat
|
||||
command: ["/app/docker/docker-bootstrap.sh", "beat"]
|
||||
env_file: docker/.env
|
||||
restart: unless-stopped
|
||||
depends_on: *superset-depends-on
|
||||
user: "root"
|
||||
volumes: *superset-volumes
|
||||
|
||||
superset-tests-worker:
|
||||
image: *superset-image
|
||||
container_name: superset_tests_worker
|
||||
|
||||
@@ -43,3 +43,4 @@ FLASK_ENV=development
|
||||
SUPERSET_ENV=development
|
||||
SUPERSET_LOAD_EXAMPLES=yes
|
||||
CYPRESS_CONFIG=false
|
||||
SUPERSET_PORT=8088
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
COMPOSE_PROJECT_NAME=superset
|
||||
|
||||
# database configurations (do not modify)
|
||||
DATABASE_DB=superset
|
||||
DATABASE_HOST=db
|
||||
DATABASE_PASSWORD=superset
|
||||
DATABASE_USER=superset
|
||||
|
||||
# database engine specific environment variables
|
||||
# change the below if you prefers another database engine
|
||||
DATABASE_PORT=5432
|
||||
DATABASE_DIALECT=postgresql
|
||||
POSTGRES_DB=superset
|
||||
POSTGRES_USER=superset
|
||||
POSTGRES_PASSWORD=superset
|
||||
#MYSQL_DATABASE=superset
|
||||
#MYSQL_USER=superset
|
||||
#MYSQL_PASSWORD=superset
|
||||
#MYSQL_RANDOM_ROOT_PASSWORD=yes
|
||||
|
||||
# Add the mapped in /app/pythonpath_docker which allows devs to override stuff
|
||||
PYTHONPATH=/app/pythonpath:/app/docker/pythonpath_dev
|
||||
REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
|
||||
FLASK_ENV=production
|
||||
SUPERSET_ENV=production
|
||||
SUPERSET_LOAD_EXAMPLES=yes
|
||||
CYPRESS_CONFIG=false
|
||||
SUPERSET_PORT=8088
|
||||
@@ -39,7 +39,13 @@ fi
|
||||
if [[ "${1}" == "worker" ]]; then
|
||||
echo "Starting Celery worker..."
|
||||
celery worker --app=superset.tasks.celery_app:app -Ofair -l INFO
|
||||
elif [[ "${1}" == "beat" ]]; then
|
||||
echo "Starting Celery beat..."
|
||||
celery beat --app=superset.tasks.celery_app:app --pidfile /tmp/celerybeat.pid -l INFO
|
||||
elif [[ "${1}" == "app" ]]; then
|
||||
echo "Starting web app..."
|
||||
flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0
|
||||
elif [[ "${1}" == "app-gunicorn" ]]; then
|
||||
echo "Starting web app..."
|
||||
/app/docker/docker-entrypoint.sh
|
||||
fi
|
||||
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
#!/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.
|
||||
#
|
||||
/app/docker/docker-init.sh
|
||||
|
||||
# TODO: copy config overrides from ENV vars
|
||||
|
||||
# TODO: run celery in detached state
|
||||
|
||||
# start up the web server
|
||||
gunicorn \
|
||||
--bind "0.0.0.0:${SUPERSET_PORT}" \
|
||||
--access-logfile '-' \
|
||||
--error-logfile '-' \
|
||||
--workers 1 \
|
||||
--worker-class gthread \
|
||||
--threads 8 \
|
||||
--timeout 60 \
|
||||
--limit-request-line 0 \
|
||||
--limit-request-field_size 0 \
|
||||
"${FLASK_APP}"
|
||||
@@ -20,11 +20,12 @@
|
||||
# development environments. Also note that superset_config_docker.py is imported
|
||||
# as a final step as a means to override "defaults" configured here
|
||||
#
|
||||
|
||||
import logging
|
||||
import os
|
||||
from datetime import timedelta
|
||||
|
||||
from cachelib.file import FileSystemCache
|
||||
from celery.schedules import crontab
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
@@ -63,20 +64,38 @@ SQLALCHEMY_DATABASE_URI = "%s://%s:%s@%s:%s/%s" % (
|
||||
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_CELERY_DB", 1)
|
||||
REDIS_RESULTS_DB = get_env_variable("REDIS_RESULTS_DB", 1)
|
||||
|
||||
RESULTS_BACKEND = FileSystemCache("/app/superset_home/sqllab")
|
||||
|
||||
|
||||
class CeleryConfig(object):
|
||||
BROKER_URL = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CELERY_DB}"
|
||||
CELERY_IMPORTS = ("superset.sql_lab",)
|
||||
CELERY_IMPORTS = ("superset.sql_lab", "superset.tasks")
|
||||
CELERY_RESULT_BACKEND = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_RESULTS_DB}"
|
||||
CELERY_ANNOTATIONS = {"tasks.add": {"rate_limit": "10/s"}}
|
||||
CELERY_TASK_PROTOCOL = 1
|
||||
CELERYD_LOG_LEVEL = "DEBUG"
|
||||
CELERYD_PREFETCH_MULTIPLIER = 1
|
||||
CELERY_ACKS_LATE = False
|
||||
CELERYBEAT_SCHEDULE = {
|
||||
"reports.scheduler": {
|
||||
"task": "reports.scheduler",
|
||||
"schedule": crontab(minute="*", hour="*"),
|
||||
},
|
||||
"reports.prune_log": {
|
||||
"task": "reports.prune_log",
|
||||
"schedule": crontab(minute=10, hour=0),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
CELERY_CONFIG = CeleryConfig
|
||||
|
||||
FEATURE_FLAGS = {"ALERT_REPORTS": True}
|
||||
ALERT_REPORTS_NOTIFICATION_DRY_RUN = True
|
||||
WEBDRIVER_BASEURL = "http://superset:8088/"
|
||||
# The base URL for the email report hyperlinks.
|
||||
WEBDRIVER_BASEURL_USER_FRIENDLY = WEBDRIVER_BASEURL
|
||||
|
||||
SQLLAB_CTAS_NO_LIMIT = True
|
||||
|
||||
#
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
v12
|
||||
+4
-2
@@ -23,7 +23,6 @@ Here's the source to the documentation hosted at
|
||||
The site runs on the Gatsby framework and uses docz for it's
|
||||
`Documentation` subsection.
|
||||
|
||||
|
||||
## Getting Started
|
||||
|
||||
```bash
|
||||
@@ -35,7 +34,10 @@ npm run start
|
||||
|
||||
## To Publish
|
||||
|
||||
To publish, the static site that Gatsby generates needs to be pushed
|
||||
Github Actions CI automatically publishes the site after changes are
|
||||
merged to master.
|
||||
|
||||
To manually publish, the static site that Gatsby generates needs to be pushed
|
||||
to the `asf-site` branch on the
|
||||
[apache/superset-site](https://github.com/apache/superset-site/)
|
||||
repository. No need to PR here, simply `git push`.
|
||||
|
||||
@@ -664,4 +664,9 @@ exports.createPages = ({ actions }) => {
|
||||
toPath: '/docs/miscellaneous/issue-codes#issue-1005',
|
||||
isPermanent: true,
|
||||
});
|
||||
createRedirect({
|
||||
fromPath: '/docs/installation/email-reports',
|
||||
toPath: '/docs/installation/alerts-reports',
|
||||
isPermanent: true,
|
||||
});
|
||||
};
|
||||
|
||||
+8
-16
@@ -1133,6 +1133,7 @@ The following configuration settings are available for async queries (see config
|
||||
- ``GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT_FIREHOSE`` - the maximum number of events for all users (FIFO eviction)
|
||||
- ``GLOBAL_ASYNC_QUERIES_JWT_COOKIE_NAME`` - the async query feature uses a `JWT <https://tools.ietf.org/html/rfc7519>`_ cookie for authentication, this setting is the cookie's name
|
||||
- ``GLOBAL_ASYNC_QUERIES_JWT_COOKIE_SECURE`` - JWT cookie secure option
|
||||
- ``GLOBAL_ASYNC_QUERIES_JWT_COOKIE_DOMAIN`` - JWT cookie domain option (`see docs for set_cookie <https://tedboy.github.io/flask/interface_api.response_object.html#flask.Response.set_cookie>`
|
||||
- ``GLOBAL_ASYNC_QUERIES_JWT_SECRET`` - JWT's use a secret key to sign and validate the contents. This value should be at least 32 bytes and have sufficient randomness for proper security
|
||||
- ``GLOBAL_ASYNC_QUERIES_TRANSPORT`` - currently the only available option is (HTTP) `polling`, but support for a WebSocket will be added in future versions
|
||||
- ``GLOBAL_ASYNC_QUERIES_POLLING_DELAY`` - the time (in ms) between polling requests
|
||||
@@ -1207,7 +1208,7 @@ To render dashboards you need to install a local browser on your superset instan
|
||||
* `geckodriver <https://github.com/mozilla/geckodriver>`_ and Firefox is preferred
|
||||
* `chromedriver <http://chromedriver.chromium.org/>`_ is a good option too
|
||||
|
||||
You need to adjust the ``EMAIL_REPORTS_WEBDRIVER`` accordingly in your configuration.
|
||||
You need to adjust the ``WEBDRIVER_TYPE`` accordingly in your configuration.
|
||||
|
||||
You also need to specify on behalf of which username to render the dashboards. In general
|
||||
dashboards and charts are not accessible to unauthorized requests, that is why the
|
||||
@@ -1487,13 +1488,14 @@ Install Superset with helm in Kubernetes
|
||||
----------------------------------------
|
||||
|
||||
You can install Superset into Kubernetes with Helm <https://helm.sh/>. The chart is
|
||||
located in ``install/helm``.
|
||||
located in the ``helm`` directory.
|
||||
|
||||
To install Superset into your Kubernetes:
|
||||
To install Superset in your Kubernetes cluster with Helm 3, run:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
helm upgrade --install superset ./install/helm/superset
|
||||
helm dep install ./helm/superset
|
||||
helm upgrade --install superset ./helm/superset
|
||||
|
||||
Note that the above command will install Superset into ``default`` namespace of your Kubernetes cluster.
|
||||
|
||||
@@ -1569,23 +1571,13 @@ You can enable or disable features with flag from ``superset_config.py``:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
DEFAULT_FEATURE_FLAGS = {
|
||||
FEATURE_FLAGS = {
|
||||
'CLIENT_CACHE': False,
|
||||
'ENABLE_EXPLORE_JSON_CSRF_PROTECTION': False,
|
||||
'PRESTO_EXPAND_DATA': False,
|
||||
}
|
||||
|
||||
Here is a list of flags and descriptions:
|
||||
|
||||
* ENABLE_EXPLORE_JSON_CSRF_PROTECTION
|
||||
|
||||
* For some security concerns, you may need to enforce CSRF protection on all query request to explore_json endpoint. In Superset, we use `flask-csrf <https://sjl.bitbucket.io/flask-csrf/>`_ add csrf protection for all POST requests, but this protection doesn't apply to GET method.
|
||||
|
||||
* When ENABLE_EXPLORE_JSON_CSRF_PROTECTION is set to true, your users cannot make GET request to explore_json. The default value for this feature False (current behavior), explore_json accepts both GET and POST request. See `PR 7935 <https://github.com/apache/superset/pull/7935>`_ for more details.
|
||||
|
||||
* PRESTO_EXPAND_DATA
|
||||
|
||||
* When this feature is enabled, nested types in Presto will be expanded into extra columns and/or arrays. This is experimental, and doesn't work with all nested types.
|
||||
A current list of feature flags can be found in `RESOURCES/FEATURE_FLAGS.md`
|
||||
|
||||
|
||||
SIP-15
|
||||
|
||||
Generated
+137
-56
@@ -8629,23 +8629,23 @@
|
||||
"integrity": "sha512-8wucrMsmXxeBxaM3TPg+YiwIJwPd1IZMudOj1XytmkP3UPXRagMhO9vo4nzzbSWeq91N1zhfUhJW2u9/MVhPxw=="
|
||||
},
|
||||
"elliptic": {
|
||||
"version": "6.5.3",
|
||||
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
|
||||
"integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
|
||||
"version": "6.5.4",
|
||||
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
|
||||
"integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
|
||||
"requires": {
|
||||
"bn.js": "^4.4.0",
|
||||
"brorand": "^1.0.1",
|
||||
"bn.js": "^4.11.9",
|
||||
"brorand": "^1.1.0",
|
||||
"hash.js": "^1.0.0",
|
||||
"hmac-drbg": "^1.0.0",
|
||||
"inherits": "^2.0.1",
|
||||
"minimalistic-assert": "^1.0.0",
|
||||
"minimalistic-crypto-utils": "^1.0.0"
|
||||
"hmac-drbg": "^1.0.1",
|
||||
"inherits": "^2.0.4",
|
||||
"minimalistic-assert": "^1.0.1",
|
||||
"minimalistic-crypto-utils": "^1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"bn.js": {
|
||||
"version": "4.11.9",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
|
||||
"integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
|
||||
"version": "4.12.0",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
|
||||
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -8696,39 +8696,6 @@
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"engine.io": {
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.2.tgz",
|
||||
"integrity": "sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg==",
|
||||
"requires": {
|
||||
"accepts": "~1.3.4",
|
||||
"base64id": "2.0.0",
|
||||
"cookie": "0.3.1",
|
||||
"debug": "~4.1.0",
|
||||
"engine.io-parser": "~2.2.0",
|
||||
"ws": "^7.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"cookie": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
|
||||
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
|
||||
"integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"engine.io-client": {
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz",
|
||||
@@ -22587,18 +22554,23 @@
|
||||
}
|
||||
},
|
||||
"socket.io": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz",
|
||||
"integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==",
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz",
|
||||
"integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==",
|
||||
"requires": {
|
||||
"debug": "~4.1.0",
|
||||
"engine.io": "~3.4.0",
|
||||
"engine.io": "~3.5.0",
|
||||
"has-binary2": "~1.0.2",
|
||||
"socket.io-adapter": "~1.1.0",
|
||||
"socket.io-client": "2.3.0",
|
||||
"socket.io-client": "2.4.0",
|
||||
"socket.io-parser": "~3.4.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"cookie": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
|
||||
"integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
@@ -22606,6 +22578,115 @@
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"engine.io": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz",
|
||||
"integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==",
|
||||
"requires": {
|
||||
"accepts": "~1.3.4",
|
||||
"base64id": "2.0.0",
|
||||
"cookie": "~0.4.1",
|
||||
"debug": "~4.1.0",
|
||||
"engine.io-parser": "~2.2.0",
|
||||
"ws": "~7.4.2"
|
||||
}
|
||||
},
|
||||
"engine.io-client": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.1.tgz",
|
||||
"integrity": "sha512-oVu9kBkGbcggulyVF0kz6BV3ganqUeqXvD79WOFKa+11oK692w1NyFkuEj4xrkFRpZhn92QOqTk4RQq5LiBXbQ==",
|
||||
"requires": {
|
||||
"component-emitter": "~1.3.0",
|
||||
"component-inherit": "0.0.3",
|
||||
"debug": "~3.1.0",
|
||||
"engine.io-parser": "~2.2.0",
|
||||
"has-cors": "1.1.0",
|
||||
"indexof": "0.0.1",
|
||||
"parseqs": "0.0.6",
|
||||
"parseuri": "0.0.6",
|
||||
"ws": "~7.4.2",
|
||||
"xmlhttprequest-ssl": "~1.5.4",
|
||||
"yeast": "0.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
}
|
||||
}
|
||||
},
|
||||
"isarray": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
|
||||
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
|
||||
},
|
||||
"parseqs": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
|
||||
"integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
|
||||
},
|
||||
"parseuri": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
|
||||
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
|
||||
},
|
||||
"socket.io-client": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
|
||||
"integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
|
||||
"requires": {
|
||||
"backo2": "1.0.2",
|
||||
"component-bind": "1.0.0",
|
||||
"component-emitter": "~1.3.0",
|
||||
"debug": "~3.1.0",
|
||||
"engine.io-client": "~3.5.0",
|
||||
"has-binary2": "~1.0.2",
|
||||
"indexof": "0.0.1",
|
||||
"parseqs": "0.0.6",
|
||||
"parseuri": "0.0.6",
|
||||
"socket.io-parser": "~3.3.0",
|
||||
"to-array": "0.1.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"socket.io-parser": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
|
||||
"integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
|
||||
"requires": {
|
||||
"component-emitter": "~1.3.0",
|
||||
"debug": "~3.1.0",
|
||||
"isarray": "2.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ws": {
|
||||
"version": "7.4.4",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
|
||||
"integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -23876,9 +23957,9 @@
|
||||
}
|
||||
},
|
||||
"three": {
|
||||
"version": "0.68.87",
|
||||
"resolved": "https://registry.npmjs.org/three/-/three-0.68.87.tgz",
|
||||
"integrity": "sha1-UNgklPHEHjgT1wzEG4fSJiBYc4A="
|
||||
"version": "0.125.0",
|
||||
"resolved": "https://registry.npmjs.org/three/-/three-0.125.0.tgz",
|
||||
"integrity": "sha512-qL36qUGsPQ/Ofo/RZdXwHwM7A8wzUSAIyawtjIebJSPvounUQeneSqxI0aBY2iwKpseGy+RUtj3C5f/z4poyXw=="
|
||||
},
|
||||
"through": {
|
||||
"version": "2.3.8",
|
||||
@@ -25936,9 +26017,9 @@
|
||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||
},
|
||||
"y18n": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
|
||||
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
|
||||
"integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ=="
|
||||
},
|
||||
"yaeti": {
|
||||
"version": "0.0.6",
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@
|
||||
"react-helmet": "^6.1.0",
|
||||
"swagger-ui-react": "^3.36.2",
|
||||
"theme-ui": "^0.3.1",
|
||||
"three": "^0.68.0"
|
||||
"three": "^0.125.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint-config-airbnb": "^18.2.1",
|
||||
|
||||
+1
-1
@@ -155,7 +155,7 @@ can optionally specify a custom formatter. Eg:
|
||||
return [{"Cost": f"US$ {cost:.2f}"}]
|
||||
|
||||
|
||||
DEFAULT_FEATURE_FLAGS = {
|
||||
FEATURE_FLAGS = {
|
||||
"ESTIMATE_QUERY_COST": True,
|
||||
"QUERY_COST_FORMATTERS_BY_ENGINE": {"presto": presto_query_cost_formatter},
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ export default class MainMenu extends React.Component {
|
||||
const { visible } = this.state;
|
||||
return (
|
||||
<Layout.Header css={headerStyle}>
|
||||
<a href="https://superset.apache.org">
|
||||
<a href="/">
|
||||
<img height="50" css={logoStyle} src={logoSvg} alt="logo" />
|
||||
</a>
|
||||
<MenuItems toggleDrawer={this.toggleDrawer} mode="horizontal" />
|
||||
|
||||
@@ -105,7 +105,7 @@ const LayoutFooter = () => (
|
||||
{new Date().getFullYear()}
|
||||
,
|
||||
<a href="http://www.apache.org/" target="_blank" rel="noreferrer">
|
||||
The Apache Software Fountation
|
||||
The Apache Software Foundation
|
||||
</a>
|
||||
, Licensed under the Apache
|
||||
<a
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
@@ -51,7 +51,7 @@ const links = [
|
||||
'join our monthly virtual meetups and register for any upcoming events',
|
||||
],
|
||||
[
|
||||
'https://github.com/apache/superset/blob/master/INTHEWILD.md',
|
||||
'https://github.com/apache/superset/blob/master/RESOURCES/INTHEWILD.md',
|
||||
'Organizations',
|
||||
'a list of some of the organizations using Superset in production',
|
||||
],
|
||||
|
||||
@@ -31,5 +31,5 @@ You can also use [PyAthena library](https://pypi.org/project/PyAthena/) (no Java
|
||||
following connection string:
|
||||
|
||||
```
|
||||
awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{
|
||||
awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
|
||||
```
|
||||
|
||||
@@ -8,11 +8,38 @@ version: 1
|
||||
|
||||
## Clickhouse
|
||||
|
||||
To use Clickhouse with Superset, you will need to add the following Python libraries:
|
||||
|
||||
```
|
||||
clickhouse-driver==0.2.0
|
||||
clickhouse-sqlalchemy==0.1.6
|
||||
```
|
||||
|
||||
If running Superset using Docker Compose, add the following to your `./docker/requirements-local.txt` file:
|
||||
|
||||
```
|
||||
clickhouse-driver>=0.2.0
|
||||
clickhouse-sqlalchemy>=0.1.6
|
||||
```
|
||||
|
||||
The recommended connector library for Clickhouse is
|
||||
[sqlalchemy-clickhouse](https://github.com/cloudflare/sqlalchemy-clickhouse).
|
||||
|
||||
The expected connection string is formatted as follows:
|
||||
|
||||
```
|
||||
clickhouse://{username}:{password}@{hostname}:{port}/{database}
|
||||
clickhouse+native://<user>:<password>@<host>:<port>/<database>[?options…]clickhouse://{username}:{password}@{hostname}:{port}/{database}
|
||||
```
|
||||
|
||||
Here's a concrete example of a real connection string:
|
||||
|
||||
```
|
||||
clickhouse+native://demo:demo@github.demo.trial.altinity.cloud/default?secure=true
|
||||
```
|
||||
|
||||
If you're using Clickhouse locally on your computer, you can get away with using a native protocol URL that
|
||||
uses the default user without a password (and doesn't encrypt the connection):
|
||||
|
||||
```
|
||||
clickhouse+native://localhost/default
|
||||
```
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
name: CrateDB
|
||||
menu: Connecting to Databases
|
||||
route: /docs/databases/cratedb
|
||||
index: 30
|
||||
version: 1
|
||||
---
|
||||
|
||||
## CrateDB
|
||||
|
||||
The recommended connector library for CrateDB is
|
||||
[crate](https://pypi.org/project/crate/).
|
||||
You need to install the extras as well for this library.
|
||||
We recommend adding something like the following
|
||||
text to your requirements file:
|
||||
|
||||
```
|
||||
crate[sqlalchemy]==0.26.0
|
||||
```
|
||||
|
||||
The expected connection string is formatted as follows:
|
||||
|
||||
```
|
||||
crate://crate@127.0.0.1:4200
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
name: Firebird
|
||||
menu: Connecting to Databases
|
||||
route: /docs/databases/firebird
|
||||
index: 30
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Firebird
|
||||
|
||||
The recommended connector library for Firebird is [sqlalchemy-firebird](https://pypi.org/project/sqlalchemy-firebird/).
|
||||
Superset has been tested on `sqlalchemy-firebird>=0.7.0, <0.8`.
|
||||
|
||||
The recommended connection string is:
|
||||
|
||||
```
|
||||
firebird+fdb://{username}:{password}@{host}:{port}//{path_to_db_file}
|
||||
```
|
||||
|
||||
Here's a connection string example of Superset connecting to a local Firebird database:
|
||||
|
||||
```
|
||||
firebird+fdb://SYSDBA:masterkey@192.168.86.38:3050//Library/Frameworks/Firebird.framework/Versions/A/Resources/examples/empbuild/employee.fdb
|
||||
```
|
||||
@@ -46,7 +46,7 @@ The resulting file should have this structure:
|
||||
"auth_uri": "...",
|
||||
"token_uri": "...",
|
||||
"auth_provider_x509_cert_url": "...",
|
||||
"client_x509_cert_url": "...",
|
||||
"client_x509_cert_url": "..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -10,8 +10,8 @@ version: 1
|
||||
|
||||
Google Sheets has a very limited
|
||||
[SQL API](https://developers.google.com/chart/interactive/docs/querylanguage). The recommended
|
||||
connector library for Google Sheets is [gsheetsdb](https://github.com/betodealmeida/gsheets-db-api).
|
||||
connector library for Google Sheets is [shillelagh](https://github.com/betodealmeida/shillelagh).
|
||||
|
||||
There are a few steps involved in connecting Superset to Google Sheets. This
|
||||
[tutorial](https://preset.io/blog/2020-06-01-connect-superset-google-sheets/) has the most upto date
|
||||
[tutorial](https://preset.io/blog/2020-06-01-connect-superset-google-sheets/) has the most up to date
|
||||
instructions on setting up this connection.
|
||||
|
||||
@@ -8,13 +8,16 @@ version: 1
|
||||
|
||||
## Install Database Drivers
|
||||
|
||||
Superset requires a Python DB-API database driver and a SQLAlchemy dialect to be installed for each datastore you want to connect to.
|
||||
Superset requires a Python DB-API database driver and a SQLAlchemy
|
||||
dialect to be installed for each datastore you want to connect to.
|
||||
|
||||
You can read more [here](/docs/databases/dockeradddrivers) about how to install new database drivers into your Superset configuration.
|
||||
You can read more [here](/docs/databases/dockeradddrivers) about how to
|
||||
install new database drivers into your Superset configuration.
|
||||
|
||||
### Supported Databases and Dependencies
|
||||
|
||||
Superset does not ship bundled with connectivity to databases, except for SQLite, which is part of the Python standard library. You’ll need to install the required packages for the database you want to use as your metadata database as well as the packages needed to connect to the databases you want to access through Superset.
|
||||
Superset does not ship bundled with connectivity to databases, except for SQLite,
|
||||
which is part of the Python standard library. You’ll need to install the required packages for the database you want to use as your metadata database as well as the packages needed to connect to the databases you want to access through Superset.
|
||||
|
||||
A list of some of the recommended packages.
|
||||
|
||||
@@ -27,22 +30,23 @@ A list of some of the recommended packages.
|
||||
|[Apache Hive](/docs/databases/hive)|```pip install pyhive```|```hive://hive@{hostname}:{port}/{database}```|
|
||||
|[Apache Impala](/docs/databases/impala)|```pip install impala```|```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+http://CONTROLLER:5436/ query?server=http://CONTROLLER:5983/```|
|
||||
|[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}```
|
||||
|[Azure MS SQL](/docs/databases/sql-server)|```pip install pymssql``` |```mssql+pymssql://UserName@presetSQL:TestPassword@presetSQL.database.windows.net:1433/TestSchema```
|
||||
|[Big Query](/docs/databases/bigquery)|```pip install pybigquery```|```bigquery://{project_id}```|
|
||||
|[ClickHouse](/docs/databases/clickhouse)|```pip install sqlalchemy-clickhouse```|```clickhouse://{username}:{password}@{hostname}:{port}/{database}```|
|
||||
|[ClickHouse](/docs/databases/clickhouse)|```pip install clickhouse-driver==0.2.0 && pip install clickhouse-sqlalchemy==0.1.6```|```clickhouse+native://{username}:{password}@{hostname}:{port}/{database}```|
|
||||
|[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 gsheetsdb```|```gsheets://```|
|
||||
|[Google Sheets](/docs/databases/google-sheets)|```pip install shillelagh[gsheetsapi]```|```gsheets://```|
|
||||
|[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://```|
|
||||
|[MySQL](/docs/databases/mysql)|```pip install mysqlclient```|```mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|
||||
|[Oracle](/docs/databases/oracle)|```pip install cx_Oracle```|```oracle://```|
|
||||
|[PostgreSQL](/docs/databases/postgresql)|```pip install psycopg2```|```postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|
||||
|[Trino](/docs/databases/trino)|```pip install sqlalchemy-trino```|```trino://{username}:{password}@{hostname}:{port}/{catalog}```|
|
||||
|[Presto](/docs/databases/presto)|```pip install pyhive```|```presto://```|
|
||||
|[SAP Hana](/docs/databases/hana)|```pip install hdbcli sqlalchemy-hana or pip install apache-superset[hana]```|```hana://{username}:{password}@{host}:{port}```|
|
||||
|[Snowflake](/docs/databases/snowflake)|```pip install snowflake-sqlalchemy```|```snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}```|
|
||||
|
||||
@@ -8,21 +8,16 @@ version: 1
|
||||
|
||||
## MySQL
|
||||
|
||||
The recommended connector library for MySQL is [mysqlclient](https://pypi.org/project/mysqlclient/).
|
||||
The recommended connector library for MySQL is [mysql-connector-python](https://pypi.org/project/mysql-connector-python/).
|
||||
|
||||
Set up the Connection String using the following settings:
|
||||
Here's the connection string:
|
||||
|
||||
User Name: UserName
|
||||
Password: DBPassword
|
||||
Database Host:
|
||||
- For Localhost or docker running Linux: localhost or 127.0.0.1
|
||||
```
|
||||
mysql+mysqlconnector://{username}:{password}@{host}/{database}
|
||||
```
|
||||
|
||||
Host:
|
||||
- For Localhost or Docker running Linux: `localhost` or `127.0.0.1`
|
||||
- For On Prem: IP address or Host name
|
||||
- For AWS Endpoint
|
||||
- For Docker running in OSX: docker.for.mac.host.internal
|
||||
Database Name: Database Name
|
||||
Port: default 3306
|
||||
|
||||
Connection String
|
||||
```
|
||||
mysql://<UserName>:<DBPassword>@<Database Host>/<Database Name>
|
||||
```
|
||||
- For Docker running in OSX: `docker.for.mac.host.internal`
|
||||
Port: `3306` by default
|
||||
|
||||
@@ -25,15 +25,18 @@ Postgres sample connection parameters:
|
||||
The connection string looks like:
|
||||
|
||||
```
|
||||
postgresql+psycopg2://{username}:{password}@{host}:{port}/{database}
|
||||
postgresql://{username}:{password}@{host}:{port}/{database}
|
||||
```
|
||||
|
||||
Extra parameters:
|
||||
You can require SSL by adding `?sslmode=require` at the end:
|
||||
|
||||
```
|
||||
?sslmode=require
|
||||
postgresql://{username}:{password}@{host}:{port}/{database}?sslmode=require
|
||||
```
|
||||
|
||||
You can read about the other SSL modes that Postgres supports in
|
||||
[Table 31-1 from this documentation](https://www.postgresql.org/docs/9.1/libpq-ssl.html).
|
||||
|
||||
More information about PostgreSQL connection options can be found in the
|
||||
[SQLAlchemy docs](https://docs.sqlalchemy.org/en/13/dialects/postgresql.html#module-sqlalchemy.dialects.postgresql.psycopg2)
|
||||
and the
|
||||
|
||||
@@ -13,12 +13,25 @@ The [pyhive](https://pypi.org/project/PyHive/) library is the recommended way to
|
||||
The expected connection string is formatted as follows:
|
||||
|
||||
```
|
||||
hive://hive@{hostname}:{port}/{database}
|
||||
presto://{hostname}:{port}/{database}
|
||||
```
|
||||
|
||||
You can pass in a username and password as well:
|
||||
|
||||
```
|
||||
presto://{username}:{password}@{hostname}:{port}/{database}
|
||||
```
|
||||
|
||||
Here is an example connection string with values:
|
||||
|
||||
```
|
||||
presto://datascientist:securepassword@presto.example.com:8080/hive
|
||||
```
|
||||
|
||||
By default Superset assumes the most recent version of Presto is being used when querying the
|
||||
datasource. If you’re using an older version of Presto, you can configure it in the extra parameter:
|
||||
|
||||
|
||||
```
|
||||
{
|
||||
"version": "0.123"
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
name: Rockset
|
||||
menu: Connecting to Databases
|
||||
route: /docs/databases/rockset
|
||||
index: 29
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Rockset
|
||||
|
||||
The connection string for Rockset is:
|
||||
|
||||
```
|
||||
rockset://apikey:{your-apikey}@api.rs2.usw2.rockset.com/
|
||||
```
|
||||
|
||||
For more complete instructions, we recommend the [Rockset documentation](https://docs.rockset.com/apache-superset/).
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: SQL Server
|
||||
name: Microsoft SQL Server
|
||||
menu: Connecting to Databases
|
||||
route: /docs/databases/sql-server
|
||||
index: 24
|
||||
@@ -13,5 +13,5 @@ The recommended connector library for SQL Server is [pymssql](https://github.com
|
||||
The connection string for SQL Server looks like this:
|
||||
|
||||
```
|
||||
mssql+pymssql://UserName@DB:Password@DB_Host:1433/TestSchema
|
||||
mssql+pymssql://<Username>:<Password>@<Host>:<Port-default:1433>/<Database Name>/?Encrypt=yes
|
||||
```
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: Trino
|
||||
menu: Connecting to Databases
|
||||
route: /docs/databases/trino
|
||||
index: 28
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Trino
|
||||
|
||||
Supported trino version 352 and higher
|
||||
|
||||
The [sqlalchemy-trino](https://pypi.org/project/sqlalchemy-trino/) library is the recommended way to connect to Trino through SQLAlchemy.
|
||||
|
||||
The expected connection string is formatted as follows:
|
||||
|
||||
```
|
||||
trino://{username}:{password}@{hostname}:{port}/{catalog}
|
||||
```
|
||||
If you are running trino with docker on local machine please use the following connection URL
|
||||
|
||||
```
|
||||
trino://trino@host.docker.internal:8080
|
||||
```
|
||||
|
||||
Reference:
|
||||
[Trino-Superset-Podcast](https://trino.io/episodes/12.html)
|
||||
@@ -6,89 +6,57 @@ index: 1
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Country Map Tools
|
||||
## The Country Map Visualization
|
||||
|
||||
This tool is used in slices for visualization number or string by region, province or department of
|
||||
your countries. So, if you want to use tools, you need ISO 3166-2 code of region, province or
|
||||
department.
|
||||
The Country Map visualization allows you to plot lightweight choropleth maps of
|
||||
your countries by province, states, or other subdivision types. It does not rely
|
||||
on any third-party map services but would require you to provide the
|
||||
[ISO-3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) codes of your country's
|
||||
top-level subdivisions. Comparing to a province or state's full names, the ISO
|
||||
code is less ambiguous and is unique to all regions in the world.
|
||||
|
||||
ISO 3166-2 is part of the ISO 3166 standard published by the International Organization for
|
||||
Standardization (ISO), and defines codes for identifying the principal subdivisions (e.g., provinces
|
||||
or states) of all countries coded in ISO 3166-1
|
||||
## Included Maps
|
||||
|
||||
The purpose of ISO 3166-2 is to establish an international standard of short and unique alphanumeric
|
||||
codes to represent the relevant administrative divisions and dependent territories of all countries
|
||||
in a more convenient and less ambiguous form than their full names. Each complete ISO 3166-2 code
|
||||
consists of two parts, separated by a hyphen:
|
||||
|
||||
The first part is the ISO 3166-1 alpha-2 code of the country; The second part is a string of up to
|
||||
three alphanumeric characters, which is usually obtained from national sources and stems from coding
|
||||
systems already in use in the country concerned, but may also be developed by the ISO itself.
|
||||
|
||||
We can apply these concepts to specify the state of Texas in the country of United States:
|
||||
|
||||
```
|
||||
US-TX
|
||||
```
|
||||
|
||||
### Included Codes
|
||||
|
||||
The ISO codes for the following countries are included in Superset:
|
||||
The Country Maps visualization already ships with the maps for the following countries:
|
||||
|
||||
- Belgium
|
||||
- Brazil
|
||||
- Bulgaria
|
||||
- Canada
|
||||
- China
|
||||
- Egypt
|
||||
- France
|
||||
- Germany
|
||||
- India
|
||||
- Iran
|
||||
- Italy
|
||||
- Japan
|
||||
- Korea
|
||||
- Liechtenstein
|
||||
- Morocco
|
||||
- Myanmar
|
||||
- Netherlands
|
||||
- Portugal
|
||||
- Russia
|
||||
- Singapore
|
||||
- Spain
|
||||
- Switzerland
|
||||
- United Kingdom
|
||||
- Syria
|
||||
- Thailand
|
||||
- Timorleste
|
||||
- UK
|
||||
- Ukraine
|
||||
- Uruguay
|
||||
- USA
|
||||
- Zambia
|
||||
|
||||
### Adding New Countries
|
||||
## Adding a New Country
|
||||
|
||||
To add a new country in country map tools, you need to follow the following steps:
|
||||
To add a new country to the list, you'd have to edit files in
|
||||
[@superset-ui/legacy-plugin-chart-country-map](https://github.com/apache-superset/superset-ui/tree/master/plugins/legacy-plugin-chart-country-map).
|
||||
|
||||
- You need shapefiles which contain data of your map. You can get this file on this site:
|
||||
https://www.diva-gis.org/gdata
|
||||
- You need to add ISO 3166-2 with column name ISO for all record in your file. It’s important
|
||||
because it’s a norm for mapping your data with geojson file
|
||||
- You need to convert shapefile to geojson file. This action can make with ogr2ogr tools:
|
||||
https://www.gdal.org/ogr2ogr.html
|
||||
- Put your geojson file in next folder : superset-frontend/src/visualizations/CountryMap/countries
|
||||
with the next name : nameofyourcountries.geojson
|
||||
- You can to reduce size of geojson file on this site: https://mapshaper.org/
|
||||
- Go in file `superset-frontend/src/explore/controls.jsx`
|
||||
- Add your country in component ‘select_country’. Here's an example:
|
||||
|
||||
```
|
||||
type: 'SelectControl',
|
||||
label: 'Country Name Type',
|
||||
default: 'France',
|
||||
choices: [
|
||||
'Belgium',
|
||||
'Brazil',
|
||||
'China',
|
||||
'Egypt',
|
||||
'France',
|
||||
'Germany',
|
||||
'Italy',
|
||||
'Japan',
|
||||
'Korea',
|
||||
'Morocco',
|
||||
'Netherlands',
|
||||
'Russia',
|
||||
'Singapore',
|
||||
'Spain',
|
||||
'Uk',
|
||||
'Usa',
|
||||
].map(s => [s, s]),
|
||||
description: 'The name of country that Superset should display',
|
||||
},
|
||||
```
|
||||
1. Generate a new GeoJSON file for your country following the guide in [this Jupyter notebook](https://github.com/apache-superset/superset-ui/blob/master/plugins/legacy-plugin-chart-country-map/scripts/Country%20Map%20GeoJSON%20Generator.ipynb).
|
||||
2. Edit the countries list in [legacy-plugin-chart-country-map/src/countries.js](https://github.com/apache-superset/superset-ui/blob/master/plugins/legacy-plugin-chart-country-map/src/countries.js).
|
||||
3. Ping one of the Superset committers to get the `@superset-ui/legacy-plugin-chart-country-map` package published, or
|
||||
publish it under another name yourself.
|
||||
4. Update npm dependencies in `superset-frontend/package.json` to install the updated plugin package.
|
||||
|
||||
@@ -84,3 +84,102 @@ Your query was not submitted to the database because it's missing one or more
|
||||
parameters. You should define all the parameters referenced in the query in a
|
||||
valid JSON document. Check that the parameters are spelled correctly and that
|
||||
the document has a valid syntax.
|
||||
|
||||
## Issue 1007
|
||||
|
||||
```
|
||||
The hostname provided can't be resolved.
|
||||
```
|
||||
|
||||
The hostname provided when adding a new database is invalid and cannot be
|
||||
resolved. Please check that there are no typos in the hostname.
|
||||
|
||||
## Issue 1008
|
||||
|
||||
```
|
||||
The port is closed.
|
||||
```
|
||||
|
||||
The port provided when adding a new database is not open. Please check that
|
||||
the port number is correct, and that the database is running and listening on
|
||||
that port.
|
||||
|
||||
## Issue 1009
|
||||
|
||||
```
|
||||
The host might be down, and cannot be reached on the provided port.
|
||||
```
|
||||
|
||||
The host provided when adding a new database doesn't seem to be up.
|
||||
Additionally, it cannot be reached on the provided port. Please check that
|
||||
there are no firewall rules preventing access to the host.
|
||||
|
||||
## Issue 1010
|
||||
|
||||
```
|
||||
Superset encountered an error while running a command.
|
||||
```
|
||||
|
||||
Something unexpected happened, and Superset encountered an error while
|
||||
running a command. Please reach out to your administrator.
|
||||
|
||||
## Issue 1011
|
||||
|
||||
```
|
||||
Superset encountered an unexpected error.
|
||||
```
|
||||
|
||||
Something unexpected happened in the Superset backend. Please reach out
|
||||
to your administrator.
|
||||
|
||||
## Issue 1012
|
||||
|
||||
```
|
||||
The username provided when connecting to a database is not valid.
|
||||
```
|
||||
|
||||
The user provided a username that doesn't exist in the database. Please check
|
||||
that the username is typed correctly and exists in the database.
|
||||
|
||||
## Issue 1013
|
||||
|
||||
```
|
||||
The password provided when connecting to a database is not valid.
|
||||
```
|
||||
|
||||
The user provided a password that is incorrect. Please check that the
|
||||
password is typed correctly.
|
||||
|
||||
|
||||
## Issue 1014
|
||||
|
||||
```
|
||||
Either the username or the password used are incorrect.
|
||||
```
|
||||
|
||||
Either the username provided does not exist or the password was written incorrectly. Please
|
||||
check that the username and password were typed correctly.
|
||||
|
||||
## Issue 1015
|
||||
|
||||
```
|
||||
Either the database is spelled incorrectly or does not exist.
|
||||
```
|
||||
|
||||
Either the database was written incorrectly or it does not exist. Check that it was typed correctly.
|
||||
|
||||
## Issue 1016
|
||||
|
||||
```
|
||||
The schema was deleted or renamed in the database.
|
||||
```
|
||||
|
||||
The schema was either removed or renamed. Check that the schema is typed correctly and exists.
|
||||
|
||||
## Issue 1017
|
||||
|
||||
```
|
||||
The user doesn't have the proper permissions to connect to the database
|
||||
```
|
||||
|
||||
We were unable to connect to your database. Please confirm that your service account has the Viewer and Job User roles on the project.
|
||||
|
||||
@@ -66,7 +66,7 @@ If you are seeing timeouts (504 Gateway Time-out) when loading dashboard or expl
|
||||
probably behind gateway or proxy server (such as Nginx). If it did not receive a timely response
|
||||
from Superset server (which is processing long queries), these web servers will send 504 status code
|
||||
to clients directly. Superset has a client-side timeout limit to address this issue. If query didn’t
|
||||
come back within clint-side timeout (60 seconds by default), Superset will display warning message
|
||||
come back within client-side timeout (60 seconds by default), Superset will display warning message
|
||||
to avoid gateway timeout message. If you have a longer gateway timeout limit, you can change the
|
||||
timeout settings in **superset_config.py**:
|
||||
|
||||
|
||||
@@ -0,0 +1,458 @@
|
||||
---
|
||||
name: Alerts and Reports
|
||||
menu: Installation and Configuration
|
||||
route: /docs/installation/alerts-reports
|
||||
index: 10
|
||||
version: 2
|
||||
---
|
||||
|
||||
## Alerts and Reports
|
||||
(version 1.0.1 and above)
|
||||
|
||||
Users can configure automated alerts and reports to send dashboards or charts to an email recipient or Slack channel.
|
||||
|
||||
- Alerts are sent when a SQL condition is reached
|
||||
- Reports are sent on a schedule
|
||||
|
||||
Alerts and reports are disabled by default. To turn them on, you need to do some setup, described here.
|
||||
|
||||
### Requirements
|
||||
|
||||
#### Commons
|
||||
|
||||
##### In your `superset_config.py`
|
||||
- `"ALERT_REPORTS"` feature flag must be turned to True.
|
||||
- `CELERYBEAT_SCHEDULE` in CeleryConfig must contain schedule for `reports.scheduler`.
|
||||
- At least one of those must be configured, depending on what you want to use:
|
||||
- emails: `SMTP_*` settings
|
||||
- Slack messages: `SLACK_API_TOKEN`
|
||||
|
||||
##### In your `Dockerfile`
|
||||
- You must install a headless browser, for taking screenshots of the charts and dashboards. Only Firefox and Chrome are currently supported.
|
||||
> If you choose Chrome, you must also change the value of `WEBDRIVER_TYPE` to `"chrome"` in your `superset_config.py`.
|
||||
|
||||
#### Slack integration
|
||||
To send alerts and reports to Slack channels, you need to create a new Slack Application on your workspace.
|
||||
1. Connect to your Slack workspace, then head to <https://api.slack.com/apps>.
|
||||
2. Create a new app.
|
||||
3. Go to "OAuth & Permissions" section, and give the following scopes to your app:
|
||||
- `incoming-webhook`
|
||||
- `files:write`
|
||||
4. At the top of the "OAuth and Permissions" section, click "install to workspace".
|
||||
5. Select a default channel for your app and continue.
|
||||
(You can post to any channel by inviting your Superset app into that channel).
|
||||
6. The app should now be installed in your workspace, and a "Bot User OAuth Access Token" should have been created. Copy that token in the `SLACK_API_TOKEN` variable of your `superset_config.py`.
|
||||
7. Restart the service (or run `superset init`) to pull in the new configuration.
|
||||
|
||||
Note: when you configure an alert or a report, the Slack channel list take channel names without the leading '#' e.g. use `alerts` instead of `#alerts`.
|
||||
|
||||
#### Kubernetes specific
|
||||
- You must have a `celery beat` pod running. If you're using the chart included in the GitHub repository under [helm/superset](https://github.com/apache/superset/tree/master/helm/superset), you need to put `supersetCeleryBeat.enabled = true` in your values override.
|
||||
- You can see the dedicated docs about [Kubernetes installation](/docs/installation/running-on-kubernetes) for more generic details.
|
||||
|
||||
#### Docker-compose specific
|
||||
##### You must have in your`docker-compose.yaml`
|
||||
- a redis message broker
|
||||
- PostgreSQL DB instead of SQLlite
|
||||
- one or more `celery worker`
|
||||
- a single `celery beat`
|
||||
|
||||
### Detailed config
|
||||
The following configurations need to be added to the `superset_config.py` file. This file is loaded when the image runs, and any configurations in it will override the default configurations found in the `config.py`.
|
||||
|
||||
You can find documentation about each field in the default `config.py` in the GitHub repository under [superset/config.py](https://github.com/apache/superset/blob/master/superset/config.py).
|
||||
|
||||
You need to replace default values with your custom Redis, Slack and/or SMTP config.
|
||||
|
||||
In the `CeleryConfig`, only the `CELERYBEAT_SCHEDULE` is relative to this feature, the rest of the `CeleryConfig` can be changed for your needs.
|
||||
|
||||
```python
|
||||
from celery.schedules import crontab
|
||||
|
||||
FEATURE_FLAGS = {
|
||||
"ALERT_REPORTS": True
|
||||
}
|
||||
|
||||
REDIS_HOST = "redis-superset"
|
||||
REDIS_PORT = "6379"
|
||||
|
||||
class CeleryConfig:
|
||||
BROKER_URL = 'redis://%s:%s/0' % (REDIS_HOST, REDIS_PORT)
|
||||
CELERY_IMPORTS = ('superset.sql_lab', "superset.tasks", "superset.tasks.thumbnails", )
|
||||
CELERY_RESULT_BACKEND = 'redis://%s:%s/0' % (REDIS_HOST, REDIS_PORT)
|
||||
CELERYD_PREFETCH_MULTIPLIER = 10
|
||||
CELERY_ACKS_LATE = True
|
||||
CELERY_ANNOTATIONS = {
|
||||
'sql_lab.get_sql_results': {
|
||||
'rate_limit': '100/s',
|
||||
},
|
||||
'email_reports.send': {
|
||||
'rate_limit': '1/s',
|
||||
'time_limit': 600,
|
||||
'soft_time_limit': 600,
|
||||
'ignore_result': True,
|
||||
},
|
||||
}
|
||||
CELERYBEAT_SCHEDULE = {
|
||||
'reports.scheduler': {
|
||||
'task': 'reports.scheduler',
|
||||
'schedule': crontab(minute='*', hour='*'),
|
||||
},
|
||||
'reports.prune_log': {
|
||||
'task': 'reports.prune_log',
|
||||
'schedule': crontab(minute=0, hour=0),
|
||||
},
|
||||
}
|
||||
CELERY_CONFIG = CeleryConfig
|
||||
|
||||
SCREENSHOT_LOCATE_WAIT = 100
|
||||
SCREENSHOT_LOAD_WAIT = 600
|
||||
|
||||
# Slack configuration
|
||||
SLACK_API_TOKEN = "xoxb-"
|
||||
|
||||
# Email configuration
|
||||
SMTP_HOST = "smtp.sendgrid.net" #change to your host
|
||||
SMTP_STARTTLS = True
|
||||
SMTP_SSL = False
|
||||
SMTP_USER = "your_user"
|
||||
SMTP_PORT = 2525 # your port eg. 587
|
||||
SMTP_PASSWORD = "your_password"
|
||||
SMTP_MAIL_FROM = "noreply@youremail.com"
|
||||
|
||||
# WebDriver configuration
|
||||
# If you use Firefox, you can stick with default values
|
||||
# If you use Chrome, then add the following WEBDRIVER_TYPE and WEBDRIVER_OPTION_ARGS
|
||||
WEBDRIVER_TYPE = "chrome"
|
||||
WEBDRIVER_OPTION_ARGS = [
|
||||
"--force-device-scale-factor=2.0",
|
||||
"--high-dpi-support=2.0",
|
||||
"--headless",
|
||||
"--disable-gpu",
|
||||
"--disable-dev-shm-usage",
|
||||
"--no-sandbox",
|
||||
"--disable-setuid-sandbox",
|
||||
"--disable-extensions",
|
||||
]
|
||||
|
||||
# This is for internal use, you can keep http
|
||||
WEBDRIVER_BASEURL="http://superset:8088"
|
||||
# This is the link sent to the recipient, change to your domain eg. https://superset.mydomain.com
|
||||
WEBDRIVER_BASEURL_USER_FRIENDLY="http://localhost:8088"
|
||||
```
|
||||
|
||||
### Custom Dockerfile
|
||||
A webdriver (and headless browser) is needed to capture screenshots of the charts and dashboards which are then sent to the recipient. As the base superset image does not have a webdriver installed, we need to extend it and install the webdriver.
|
||||
|
||||
#### Using Firefox
|
||||
```docker
|
||||
FROM apache/superset:1.0.1
|
||||
|
||||
USER root
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install --no-install-recommends -y firefox-esr
|
||||
|
||||
ENV GECKODRIVER_VERSION=0.29.0
|
||||
RUN wget -q https://github.com/mozilla/geckodriver/releases/download/v${GECKODRIVER_VERSION}/geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz && \
|
||||
tar -x geckodriver -zf geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz -O > /usr/bin/geckodriver && \
|
||||
chmod 755 /usr/bin/geckodriver && \
|
||||
rm geckodriver-v${GECKODRIVER_VERSION}-linux64.tar.gz
|
||||
|
||||
RUN pip install --no-cache gevent psycopg2 redis
|
||||
|
||||
USER superset
|
||||
```
|
||||
#### Using Chrome
|
||||
```docker
|
||||
FROM apache/superset:1.0.1
|
||||
|
||||
USER root
|
||||
|
||||
RUN apt-get update && \
|
||||
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
|
||||
apt-get install -y --no-install-recommends ./google-chrome-stable_current_amd64.deb && \
|
||||
rm -f google-chrome-stable_current_amd64.deb
|
||||
|
||||
RUN export CHROMEDRIVER_VERSION=$(curl --silent https://chromedriver.storage.googleapis.com/LATEST_RELEASE_88) && \
|
||||
wget -q https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip && \
|
||||
unzip chromedriver_linux64.zip -d /usr/bin && \
|
||||
chmod 755 /usr/bin/chromedriver && \
|
||||
rm -f chromedriver_linux64.zip
|
||||
|
||||
RUN pip install --no-cache gevent psycopg2 redis
|
||||
|
||||
USER superset
|
||||
```
|
||||
>Don't forget to set `WEBDRIVER_TYPE` and `WEBDRIVER_OPTION_ARGS` in your config if you use Chrome.
|
||||
|
||||
### Summary of steps to turn on alerts and reporting:
|
||||
Using the templates below,
|
||||
1. Create a new directory and create the Dockerfile
|
||||
2. Build the extended image using the Dockerfile
|
||||
3. Create the `docker-compose.yaml` file in the same directory
|
||||
4. Create a new subdirectory called `config`
|
||||
5. Create the `superset_config.py` file in the `config` subdirectory
|
||||
6. Run the image using `docker-compose up` in the same directory as the `docker-compose.py` file
|
||||
7. In a new terminal window, upgrade the DB by running `docker exec -it superset-1.0.1-extended superset db upgrade`
|
||||
8. Then run `docker exec -it superset-1.0.1-extended superset init`
|
||||
9. Then setup your admin user if need be, `docker exec -it superset-1.0.1-extended superset fab create-admin`
|
||||
10. Finally, restart the running instance - `CTRL-C`, then `docker-compose up`
|
||||
|
||||
(note: v 1.0.1 is current at time of writing, you can change the version number to the latest version if a newer version is available)
|
||||
|
||||
### Docker compose
|
||||
The docker compose file lists the services that will be used when running the image. The specific services needed for alerts and reporting are outlined below.
|
||||
|
||||
#### Redis message broker
|
||||
To ferry requests between the celery worker and the Superset instance, we use a message broker. This template uses Redis.
|
||||
|
||||
#### Replacing SQLite with Postgres
|
||||
While it might be possible to use SQLite for alerts and reporting, it is highly recommended using a more production ready DB for Superset in general. Our template uses Postgres.
|
||||
|
||||
#### Celery worker
|
||||
The worker will process the tasks that need to be performed when an alert or report is fired.
|
||||
|
||||
#### Celery beat
|
||||
The beat is the scheduler that tells the worker when to perform its tasks. This schedule is defined when you create the alert or report.
|
||||
|
||||
#### Full `docker-compose.yaml` configuration
|
||||
The Redis, Postgres, Celery worker and Celery beat services are defined in the template:
|
||||
|
||||
Config for `docker-compose.yaml`:
|
||||
```docker
|
||||
version: '3.6'
|
||||
services:
|
||||
redis:
|
||||
image: redis:6.0.9-buster
|
||||
restart: on-failure
|
||||
volumes:
|
||||
- redis:/data
|
||||
postgres:
|
||||
image: postgres
|
||||
restart: on-failure
|
||||
environment:
|
||||
POSTGRES_DB: superset
|
||||
POSTGRES_PASSWORD: superset
|
||||
POSTGRES_USER: superset
|
||||
volumes:
|
||||
- db:/var/lib/postgresql/data
|
||||
worker:
|
||||
image: superset-1.0.1-extended
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
disable: true
|
||||
depends_on:
|
||||
- superset
|
||||
- postgres
|
||||
- redis
|
||||
command: "celery worker --app=superset.tasks.celery_app:app --pool=gevent --concurrency=500"
|
||||
volumes:
|
||||
- ./config/:/app/pythonpath/
|
||||
beat:
|
||||
image: superset-1.0.1-extended
|
||||
restart: on-failure
|
||||
healthcheck:
|
||||
disable: true
|
||||
depends_on:
|
||||
- superset
|
||||
- postgres
|
||||
- redis
|
||||
command: "celery beat --app=superset.tasks.celery_app:app --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedule"
|
||||
volumes:
|
||||
- ./config/:/app/pythonpath/
|
||||
superset:
|
||||
image: superset-1.0.1-extended
|
||||
restart: on-failure
|
||||
environment:
|
||||
- SUPERSET_PORT=8088
|
||||
ports:
|
||||
- "8088:8088"
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
command: gunicorn --bind 0.0.0.0:8088 --access-logfile - --error-logfile - --workers 5 --worker-class gthread --threads 4 --timeout 200 --limit-request-line 4094 --limit-request-field_size 8190 superset.app:create_app()
|
||||
volumes:
|
||||
- ./config/:/app/pythonpath/
|
||||
volumes:
|
||||
db:
|
||||
external: true
|
||||
redis:
|
||||
external: false
|
||||
```
|
||||
|
||||
### Summary
|
||||
With the extended image created by using the `Dockerfile`, and then running that image using `docker-compose.yaml`, plus the required configurations in the `superset_config.py` you should now have alerts and reporting working correctly.
|
||||
|
||||
- The above templates also work in a Docker swarm environment, you would just need to add `Deploy:` to the Superset, Redis and Postgres services along with your specific configs for your swarm
|
||||
|
||||
|
||||
# Old Reports feature
|
||||
|
||||
## Scheduling and Emailing Reports
|
||||
(version 0.38 and below)
|
||||
### Email Reports
|
||||
|
||||
Email reports allow users to schedule email reports for:
|
||||
|
||||
- chart and dashboard visualization (attachment or inline)
|
||||
- chart data (CSV attachment on inline table)
|
||||
|
||||
Enable email reports in your `superset_config.py` file:
|
||||
|
||||
```python
|
||||
ENABLE_SCHEDULED_EMAIL_REPORTS = True
|
||||
```
|
||||
|
||||
This flag enables some permissions that are stored in your database, so you'll want to run `superset init` again if you are running this in a dev environment.
|
||||
Now you will find two new items in the navigation bar that allow you to schedule email reports:
|
||||
|
||||
- **Manage > Dashboard Emails**
|
||||
- **Manage > Chart Email Schedules**
|
||||
|
||||
Schedules are defined in [crontab format](https://crontab.guru/) and each schedule can have a list
|
||||
of recipients (all of them can receive a single mail, or separate mails). For audit purposes, all
|
||||
outgoing mails can have a mandatory BCC.
|
||||
|
||||
In order get picked up you need to configure a celery worker and a celery beat (see section above
|
||||
“Celery Tasks”). Your celery configuration also needs an entry `email_reports.schedule_hourly` for
|
||||
`CELERYBEAT_SCHEDULE`.
|
||||
|
||||
To send emails you need to configure SMTP settings in your `superset_config.py` configuration file.
|
||||
|
||||
```python
|
||||
EMAIL_NOTIFICATIONS = True
|
||||
|
||||
SMTP_HOST = "email-smtp.eu-west-1.amazonaws.com"
|
||||
SMTP_STARTTLS = True
|
||||
SMTP_SSL = False
|
||||
SMTP_USER = "smtp_username"
|
||||
SMTP_PORT = 25
|
||||
SMTP_PASSWORD = os.environ.get("SMTP_PASSWORD")
|
||||
SMTP_MAIL_FROM = "insights@komoot.com"
|
||||
```
|
||||
|
||||
To render dashboards you need to install a local browser on your Superset instance:
|
||||
|
||||
- [geckodriver](https://github.com/mozilla/geckodriver) for Firefox
|
||||
- [chromedriver](http://chromedriver.chromium.org/) for Chrome
|
||||
|
||||
You'll need to adjust the `WEBDRIVER_TYPE` accordingly in your configuration. You also need
|
||||
to specify on behalf of which username to render the dashboards. In general dashboards and charts
|
||||
are not accessible to unauthorized requests, that is why the worker needs to take over credentials
|
||||
of an existing user to take a snapshot.
|
||||
|
||||
```python
|
||||
THUMBNAIL_SELENIUM_USER = 'username_with_permission_to_access_dashboards'
|
||||
```
|
||||
|
||||
**Important notes**
|
||||
|
||||
- Be mindful of the concurrency setting for celery (using `-c 4`). Selenium/webdriver instances can
|
||||
consume a lot of CPU / memory on your servers.
|
||||
- In some cases, if you notice a lot of leaked geckodriver processes, try running your celery
|
||||
processes with `celery worker --pool=prefork --max-tasks-per-child=128 ...`
|
||||
- It is recommended to run separate workers for the `sql_lab` and `email_reports` tasks. This can be
|
||||
done using the `queue` field in `CELERY_ANNOTATIONS`.
|
||||
- Adjust `WEBDRIVER_BASEURL` in your configuration file if celery workers can’t access Superset via
|
||||
its default value of `http://0.0.0.0:8080/`.
|
||||
|
||||
### Schedule Reports
|
||||
|
||||
You can optionally allow your users to schedule queries directly in SQL Lab. This is done by addding
|
||||
extra metadata to saved queries, which are then picked up by an external scheduled (like
|
||||
[Apache Airflow](https://airflow.apache.org/)).
|
||||
|
||||
To allow scheduled queries, add the following to your configuration file:
|
||||
|
||||
```python
|
||||
FEATURE_FLAGS = {
|
||||
# Configuration for scheduling queries from SQL Lab. This information is
|
||||
# collected when the user clicks "Schedule query", and saved into the `extra`
|
||||
# field of saved queries.
|
||||
# See: https://github.com/mozilla-services/react-jsonschema-form
|
||||
'SCHEDULED_QUERIES': {
|
||||
'JSONSCHEMA': {
|
||||
'title': 'Schedule',
|
||||
'description': (
|
||||
'In order to schedule a query, you need to specify when it '
|
||||
'should start running, when it should stop running, and how '
|
||||
'often it should run. You can also optionally specify '
|
||||
'dependencies that should be met before the query is '
|
||||
'executed. Please read the documentation for best practices '
|
||||
'and more information on how to specify dependencies.'
|
||||
),
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'output_table': {
|
||||
'type': 'string',
|
||||
'title': 'Output table name',
|
||||
},
|
||||
'start_date': {
|
||||
'type': 'string',
|
||||
'title': 'Start date',
|
||||
# date-time is parsed using the chrono library, see
|
||||
# https://www.npmjs.com/package/chrono-node#usage
|
||||
'format': 'date-time',
|
||||
'default': 'tomorrow at 9am',
|
||||
},
|
||||
'end_date': {
|
||||
'type': 'string',
|
||||
'title': 'End date',
|
||||
# date-time is parsed using the chrono library, see
|
||||
# https://www.npmjs.com/package/chrono-node#usage
|
||||
'format': 'date-time',
|
||||
'default': '9am in 30 days',
|
||||
},
|
||||
'schedule_interval': {
|
||||
'type': 'string',
|
||||
'title': 'Schedule interval',
|
||||
},
|
||||
'dependencies': {
|
||||
'type': 'array',
|
||||
'title': 'Dependencies',
|
||||
'items': {
|
||||
'type': 'string',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
'UISCHEMA': {
|
||||
'schedule_interval': {
|
||||
'ui:placeholder': '@daily, @weekly, etc.',
|
||||
},
|
||||
'dependencies': {
|
||||
'ui:help': (
|
||||
'Check the documentation for the correct format when '
|
||||
'defining dependencies.'
|
||||
),
|
||||
},
|
||||
},
|
||||
'VALIDATION': [
|
||||
# ensure that start_date <= end_date
|
||||
{
|
||||
'name': 'less_equal',
|
||||
'arguments': ['start_date', 'end_date'],
|
||||
'message': 'End date cannot be before start date',
|
||||
# this is where the error message is shown
|
||||
'container': 'end_date',
|
||||
},
|
||||
],
|
||||
# link to the scheduler; this example links to an Airflow pipeline
|
||||
# that uses the query id and the output table as its name
|
||||
'linkback': (
|
||||
'https://airflow.example.com/admin/airflow/tree?'
|
||||
'dag_id=query_${id}_${extra_json.schedule_info.output_table}'
|
||||
),
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
This feature flag is based on
|
||||
[react-jsonschema-form](https://github.com/mozilla-services/react-jsonschema-form) and will add a
|
||||
button called “Schedule Query” to SQL Lab. When the button is clicked, a modal will show up where
|
||||
the user can add the metadata required for scheduling the query.
|
||||
|
||||
This information can then be retrieved from the endpoint `/savedqueryviewapi/api/read` and used to
|
||||
schedule the queries that have `scheduled_queries` in their JSON metadata. For schedulers other than
|
||||
Airflow, additional fields can be easily added to the configuration file above.
|
||||
@@ -122,9 +122,9 @@ OAUTH_PROVIDERS = [
|
||||
'token_key':'access_token', # Name of the token in the response of access_token_url
|
||||
'icon':'fa-address-card', # Icon for the provider
|
||||
'remote_app': {
|
||||
'consumer_key':'myClientId', # Client Id (Identify Superset application)
|
||||
'consumer_secret':'MySecret', # Secret for this Client Id (Identify Superset application)
|
||||
'request_token_params':{
|
||||
'client_id':'myClientId', # Client Id (Identify Superset application)
|
||||
'client_secret':'MySecret', # Secret for this Client Id (Identify Superset application)
|
||||
'client_kwargs':{
|
||||
'scope': 'read' # Scope for the Authorization
|
||||
},
|
||||
'access_token_method':'POST', # HTTP Method to call access_token_url
|
||||
@@ -185,24 +185,14 @@ functionalities in Superset, but will be only affected by a subset of users.
|
||||
You can enable or disable features with flag from `superset_config.py`:
|
||||
|
||||
```python
|
||||
DEFAULT_FEATURE_FLAGS = {
|
||||
FEATURE_FLAGS = {
|
||||
'CLIENT_CACHE': False,
|
||||
'ENABLE_EXPLORE_JSON_CSRF_PROTECTION': False,
|
||||
'PRESTO_EXPAND_DATA': False,
|
||||
}
|
||||
```
|
||||
|
||||
Here is a list of flags and descriptions:
|
||||
|
||||
- `ENABLE_EXPLORE_JSON_CSRF_PROTECTION`: For some security concerns, you may need to enforce CSRF
|
||||
protection on all query request to the `explore_json` endpoint. When
|
||||
`ENABLE_EXPLORE_JSON_CSRF_PROTECTION` is set to true, your users cannot make GET request to
|
||||
`explore_json`. The default value for this feature is `False` and `explore_json` will accept both
|
||||
GET and POST request. See [PR 7935](https://github.com/apache/superset/pull/7935) for
|
||||
more details.
|
||||
|
||||
- `PRESTO_EXPAND_DATA`: When this feature is enabled, nested types in Presto will be expanded into
|
||||
extra columns and / or arrays. This is experimental, and doesn’t work with all nested types.
|
||||
A current list of feature flags can be found in `RESOURCES/FEATURE_FLAGS.md`
|
||||
|
||||
### SIP 15
|
||||
|
||||
|
||||
@@ -1,175 +0,0 @@
|
||||
---
|
||||
name: Scheduling and Emailing Reports
|
||||
menu: Installation and Configuration
|
||||
route: /docs/installation/email-reports
|
||||
index: 10
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Scheduling and Emailing Reports
|
||||
|
||||
### Email Reports
|
||||
|
||||
Email reports allow users to schedule email reports for:
|
||||
|
||||
- chart and dashboard visualization (attachment or inline)
|
||||
- chart data (CSV attachment on inline table)
|
||||
|
||||
Enable email reports in your `superset_config.py` file:
|
||||
|
||||
```python
|
||||
ENABLE_SCHEDULED_EMAIL_REPORTS = True
|
||||
```
|
||||
|
||||
This flag enables some permissions that are stored in your database, so you'll want to run `superset init` again if you are running this in a dev environment.
|
||||
Now you will find two new items in the navigation bar that allow you to schedule email reports:
|
||||
|
||||
- **Manage > Dashboard Emails**
|
||||
- **Manage > Chart Email Schedules**
|
||||
|
||||
Schedules are defined in [crontab format](https://crontab.guru/) and each schedule can have a list
|
||||
of recipients (all of them can receive a single mail, or separate mails). For audit purposes, all
|
||||
outgoing mails can have a mandatory BCC.
|
||||
|
||||
In order get picked up you need to configure a celery worker and a celery beat (see section above
|
||||
“Celery Tasks”). Your celery configuration also needs an entry `email_reports.schedule_hourly` for
|
||||
`CELERYBEAT_SCHEDULE`.
|
||||
|
||||
To send emails you need to configure SMTP settings in your `superset_config.py` configuration file.
|
||||
|
||||
```python
|
||||
EMAIL_NOTIFICATIONS = True
|
||||
|
||||
SMTP_HOST = "email-smtp.eu-west-1.amazonaws.com"
|
||||
SMTP_STARTTLS = True
|
||||
SMTP_SSL = False
|
||||
SMTP_USER = "smtp_username"
|
||||
SMTP_PORT = 25
|
||||
SMTP_PASSWORD = os.environ.get("SMTP_PASSWORD")
|
||||
SMTP_MAIL_FROM = "insights@komoot.com"
|
||||
```
|
||||
|
||||
To render dashboards you need to install a local browser on your Superset instance:
|
||||
|
||||
- [geckodriver](https://github.com/mozilla/geckodriver) for Firefox
|
||||
- [chromedriver](http://chromedriver.chromium.org/) for Chrome
|
||||
|
||||
You'll need to adjust the `EMAIL_REPORTS_WEBDRIVER` accordingly in your configuration. You also need
|
||||
to specify on behalf of which username to render the dashboards. In general dashboards and charts
|
||||
are not accessible to unauthorized requests, that is why the worker needs to take over credentials
|
||||
of an existing user to take a snapshot.
|
||||
|
||||
```python
|
||||
EMAIL_REPORTS_USER = 'username_with_permission_to_access_dashboards'
|
||||
```
|
||||
|
||||
**Important notes**
|
||||
|
||||
- Be mindful of the concurrency setting for celery (using `-c 4`). Selenium/webdriver instances can
|
||||
consume a lot of CPU / memory on your servers.
|
||||
- In some cases, if you notice a lot of leaked geckodriver processes, try running your celery
|
||||
processes with `celery worker --pool=prefork --max-tasks-per-child=128 ...`
|
||||
- It is recommended to run separate workers for the `sql_lab` and `email_reports` tasks. This can be
|
||||
done using the `queue` field in `CELERY_ANNOTATIONS`.
|
||||
- Adjust `WEBDRIVER_BASEURL` in your configuration file if celery workers can’t access Superset via
|
||||
its default value of `http://0.0.0.0:8080/`.
|
||||
|
||||
### Schedule Reports
|
||||
|
||||
You can optionally allow your users to schedule queries directly in SQL Lab. This is done by addding
|
||||
extra metadata to saved queries, which are then picked up by an external scheduled (like
|
||||
[Apache Airflow](https://airflow.apache.org/)).
|
||||
|
||||
To allow scheduled queries, add the following to your configuration file:
|
||||
|
||||
```python
|
||||
FEATURE_FLAGS = {
|
||||
# Configuration for scheduling queries from SQL Lab. This information is
|
||||
# collected when the user clicks "Schedule query", and saved into the `extra`
|
||||
# field of saved queries.
|
||||
# See: https://github.com/mozilla-services/react-jsonschema-form
|
||||
'SCHEDULED_QUERIES': {
|
||||
'JSONSCHEMA': {
|
||||
'title': 'Schedule',
|
||||
'description': (
|
||||
'In order to schedule a query, you need to specify when it '
|
||||
'should start running, when it should stop running, and how '
|
||||
'often it should run. You can also optionally specify '
|
||||
'dependencies that should be met before the query is '
|
||||
'executed. Please read the documentation for best practices '
|
||||
'and more information on how to specify dependencies.'
|
||||
),
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'output_table': {
|
||||
'type': 'string',
|
||||
'title': 'Output table name',
|
||||
},
|
||||
'start_date': {
|
||||
'type': 'string',
|
||||
'title': 'Start date',
|
||||
# date-time is parsed using the chrono library, see
|
||||
# https://www.npmjs.com/package/chrono-node#usage
|
||||
'format': 'date-time',
|
||||
'default': 'tomorrow at 9am',
|
||||
},
|
||||
'end_date': {
|
||||
'type': 'string',
|
||||
'title': 'End date',
|
||||
# date-time is parsed using the chrono library, see
|
||||
# https://www.npmjs.com/package/chrono-node#usage
|
||||
'format': 'date-time',
|
||||
'default': '9am in 30 days',
|
||||
},
|
||||
'schedule_interval': {
|
||||
'type': 'string',
|
||||
'title': 'Schedule interval',
|
||||
},
|
||||
'dependencies': {
|
||||
'type': 'array',
|
||||
'title': 'Dependencies',
|
||||
'items': {
|
||||
'type': 'string',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
'UISCHEMA': {
|
||||
'schedule_interval': {
|
||||
'ui:placeholder': '@daily, @weekly, etc.',
|
||||
},
|
||||
'dependencies': {
|
||||
'ui:help': (
|
||||
'Check the documentation for the correct format when '
|
||||
'defining dependencies.'
|
||||
),
|
||||
},
|
||||
},
|
||||
'VALIDATION': [
|
||||
# ensure that start_date <= end_date
|
||||
{
|
||||
'name': 'less_equal',
|
||||
'arguments': ['start_date', 'end_date'],
|
||||
'message': 'End date cannot be before start date',
|
||||
# this is where the error message is shown
|
||||
'container': 'end_date',
|
||||
},
|
||||
],
|
||||
# link to the scheduler; this example links to an Airflow pipeline
|
||||
# that uses the query id and the output table as its name
|
||||
'linkback': (
|
||||
'https://airflow.example.com/admin/airflow/tree?'
|
||||
'dag_id=query_${id}_${extra_json.schedule_info.output_table}'
|
||||
),
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
This feature flag is based on
|
||||
[react-jsonschema-form](https://github.com/mozilla-services/react-jsonschema-form) and will add a
|
||||
button called “Schedule Query” to SQL Lab. When the button is clicked, a modal will show up where
|
||||
the user can add the metadata required for scheduling the query.
|
||||
|
||||
This information can then be retrieved from the endpoint `/savedqueryviewapi/api/read` and used to
|
||||
schedule the queries that have `scheduled_queries` in their JSON metadata. For schedulers other than
|
||||
Airflow, additional fields can be easily added to the configuration file above.
|
||||
@@ -32,12 +32,13 @@ part of the base Docker installation on Linux, once you have a working engine, f
|
||||
|
||||
**Windows**
|
||||
|
||||
Superset is not officially supported on Windows unfortunately. The best option for Windows users to
|
||||
Superset is not officially supported on Windows unfortunately. One option for Windows users to
|
||||
try out Superset locally is to install an Ubuntu Desktop VM via
|
||||
[VirtualBox](https://www.virtualbox.org/) and proceed with the Docker on Linux instructions inside
|
||||
of that VM. We recommend assigning at least 8GB of RAM to the virtual machine as well as
|
||||
provisioning a hard drive of at least 40GB, so that there will be enough space for both the OS and
|
||||
all of the required dependencies.
|
||||
all of the required dependencies. Docker Desktop [recently added support for Windows Subsystem for Linux (WSL) 2](https://docs.docker.com/docker-for-windows/wsl/), which may be another option.
|
||||
|
||||
|
||||
### 2. Clone Superset's Github repository
|
||||
|
||||
@@ -59,21 +60,30 @@ Navigate to the folder you created in step 1:
|
||||
$ cd superset
|
||||
```
|
||||
|
||||
We recommend that you check out and run the code from the last tagged release:
|
||||
|
||||
```bash
|
||||
$ git checkout latest
|
||||
```
|
||||
|
||||
Then, run the following command:
|
||||
|
||||
```bash
|
||||
$ docker-compose up
|
||||
$ docker-compose -f docker-compose-non-dev.yml up
|
||||
```
|
||||
|
||||
You should see a wall of logging output from the containers being launched on your machine. Once
|
||||
this output slows, you should have a running instance of Superset on your local machine!
|
||||
|
||||
**Note:** This will bring up superset in a non-dev mode, changes to the codebase will not be reflected.
|
||||
If you would like to run superset in dev mode to test local changes, simply replace the previous command with: `docker-compose up`,
|
||||
and wait for the `superset_node` container to finish building the assets.
|
||||
|
||||
#### Configuring Docker Compose
|
||||
|
||||
The following is for users who want to configure how Superset starts up in Docker Compose; otherwise, you can skip to the next section.
|
||||
|
||||
You can configure the Docker Compose settings for dev and non-dev mode with `docker/.env` and `docker/.env-non-dev` respectively. These environment files set the environment for most containers in the Docker Compose setup, and some variables affect multiple containers and others only single ones.
|
||||
|
||||
One important variable is `SUPERSET_LOAD_EXAMPLES` which determines whether the `superset_init` container will load example data and visualizations into the database and Superset. Thiese examples are quite helpful for most people, but probably unnecessary for experienced users. The loading process can sometimes take a few minutes and a good amount of CPU, so you may want to disable it on a resource-constrained device.
|
||||
|
||||
**Note:** Users often want to connect to other databases from Superset. Currently, the easiest way to do this is to modify the `docker-compose-non-dev.yml` file and add your database as a service that the other services depend on (via `x-superset-depends-on`). Others have attempted to set `network_mode: host` on the Superset services, but these generally break the installation, because the configuration requires use of the Docker Compose DNS resolver for the service names. If you have a good solution for this, let us know!
|
||||
|
||||
|
||||
### 4. Log in to Superset
|
||||
|
||||
Your local Superset instance also includes a Postgres server to store your data and is already
|
||||
@@ -90,6 +100,3 @@ username: admin
|
||||
```bash
|
||||
password: admin
|
||||
```
|
||||
|
||||
Congrats! You have successfully installed Superset! Click 'Next' to learn how to connect a database
|
||||
driver.
|
||||
|
||||
@@ -50,21 +50,30 @@ We don't recommend using the system installed Python. Instead, first install the
|
||||
[homebrew](https://brew.sh/) manager and then run the following commands:
|
||||
|
||||
```
|
||||
brew install pkg-config libffi openssl python
|
||||
|
||||
env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" pip install cryptography==2.4.2
|
||||
brew install readline pkg-config libffi openssl mysql postgres
|
||||
```
|
||||
|
||||
You should install a recent version of Python (Superset uses 3.7.9). We'd recommend using a Python version manager like [pyenv](https://github.com/pyenv/pyenv) (and also [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv)).
|
||||
|
||||
Let's also make sure we have the latest version of `pip` and `setuptools`:
|
||||
|
||||
```
|
||||
pip install --upgrade setuptools pip
|
||||
```
|
||||
|
||||
Lastly, you may need to set LDFLAGS and CFLAGS for certain Python packages to properly build. You can export these variables with:
|
||||
|
||||
```
|
||||
export LDFLAGS="-L$(brew --prefix openssl)/lib"
|
||||
export CFLAGS="-I$(brew --prefix openssl)/include"
|
||||
```
|
||||
|
||||
These will now be available when pip installing requirements.
|
||||
|
||||
### Python Virtual Environment
|
||||
|
||||
We highly recommend installing Superset inside of a virtual environment. Python ships with
|
||||
`virtualenv` out of the box but you can install it using:
|
||||
`virtualenv` out of the box. If you're using [pyenv](https://github.com/pyenv/pyenv), you can install [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv). Or you can install it with `pip`:
|
||||
|
||||
```
|
||||
pip install virtualenv
|
||||
@@ -79,6 +88,14 @@ python3 -m venv venv
|
||||
. venv/bin/activate
|
||||
```
|
||||
|
||||
Or with pyenv-virtualenv:
|
||||
|
||||
```
|
||||
# Here we name the virtual env 'superset'
|
||||
pyenv virtualenv superset
|
||||
pyenv activate superset
|
||||
```
|
||||
|
||||
Once you activated your virtual environment, all of the Python packages you install or uninstall
|
||||
will be confined to this environment. You can exit the environment by running `deactivate` on the
|
||||
command line.
|
||||
@@ -120,12 +137,13 @@ locally by default at `localhost:8088`) and login using the username and passwor
|
||||
### Installing Superset with Helm in Kubernetes
|
||||
|
||||
You can install Superset into Kubernetes with [Helm](https://helm.sh/). The chart is located in
|
||||
`install/helm`.
|
||||
the `helm/` directory.
|
||||
|
||||
To install Superset in Kubernetes, run:
|
||||
To install Superset in your Kubernetes cluster with Helm 3, run:
|
||||
|
||||
```
|
||||
helm upgrade --install superset ./install/helm/superset
|
||||
helm dep up ./helm/superset
|
||||
helm upgrade --install superset ./helm/superset
|
||||
```
|
||||
|
||||
Note that the above command will install Superset into `default` namespace of your Kubernetes
|
||||
|
||||
@@ -0,0 +1,376 @@
|
||||
---
|
||||
name: Running on Kubernetes
|
||||
menu: Installation and Configuration
|
||||
route: /docs/installation/running-on-kubernetes
|
||||
index: 12
|
||||
version: 1
|
||||
---
|
||||
|
||||
## Running on Kubernetes
|
||||
|
||||
Running on Kubernetes is supported with the provided [Helm](https://helm.sh/) chart found in the official [Superset helm repository](https://apache.github.io/superset/index.yaml).
|
||||
|
||||
### Prerequisites
|
||||
|
||||
* A Kubernetes cluster
|
||||
* Helm installed
|
||||
|
||||
### Running
|
||||
|
||||
1. Add the Superset helm repository
|
||||
|
||||
```sh
|
||||
helm repo add superset https://apache.github.io/superset
|
||||
"superset" has been added to your repositories
|
||||
```
|
||||
|
||||
1. View charts in repo
|
||||
```sh
|
||||
helm search repo superset
|
||||
NAME CHART VERSION APP VERSION DESCRIPTION
|
||||
superset/superset 0.1.1 1.0 Apache Superset is a modern, enterprise-ready b...
|
||||
```
|
||||
|
||||
1. Configure your setting overrides
|
||||
|
||||
Just like any typical Helm chart, you'll need to craft a `values.yaml` file that would define/override any of the values exposed into the default [values.yaml](https://github.com/apache/superset/tree/master/helm/superset/values.yaml), or from any of the dependent charts it depends on:
|
||||
|
||||
* [bitnami/redis](https://artifacthub.io/packages/helm/bitnami/redis)
|
||||
* [bitnami/postgresql](https://artifacthub.io/packages/helm/bitnami/postgresql)
|
||||
|
||||
More info down below on some important overrides you might need.
|
||||
|
||||
1. Install and run
|
||||
|
||||
```sh
|
||||
helm upgrade --install --values my-values.yaml superset superset/superset
|
||||
```
|
||||
|
||||
You should see various pods popping up, such as:
|
||||
|
||||
```sh
|
||||
kubectl get pods
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
superset-celerybeat-7cdcc9575f-k6xmc 1/1 Running 0 119s
|
||||
superset-f5c9c667-dw9lp 1/1 Running 0 4m7s
|
||||
superset-f5c9c667-fk8bk 1/1 Running 0 4m11s
|
||||
superset-init-db-zlm9z 0/1 Completed 0 111s
|
||||
superset-postgresql-0 1/1 Running 0 6d20h
|
||||
superset-redis-master-0 1/1 Running 0 6d20h
|
||||
superset-worker-75b48bbcc-jmmjr 1/1 Running 0 4m8s
|
||||
superset-worker-75b48bbcc-qrq49 1/1 Running 0 4m12s
|
||||
```
|
||||
|
||||
The exact list will depend on some of your specific configuration overrides but you should generally expect:
|
||||
|
||||
* N `superset-xxxx-yyyy` and `superset-worker-xxxx-yyyy` pods (depending on your `replicaCount` value)
|
||||
* 1 `superset-postgresql-0` depending on your postgres settings
|
||||
* 1 `superset-redis-master-0` depending on your redis settings
|
||||
* 1 `superset-celerybeat-xxxx-yyyy` pod if you have `supersetCeleryBeat.enabled = true` in your values overrides
|
||||
|
||||
1. Access it
|
||||
|
||||
The chart will publish appropriate services to expose the Superset UI internally within your k8s cluster. To access it externally you will have to either:
|
||||
|
||||
* Configure the Service as a `LoadBalancer` or `NodePort`
|
||||
* Set up an `Ingress` for it - the chart includes a definition, but will need to be tuned to your needs (hostname, tls, annotations etc...)
|
||||
* Run `kubectl port-forward superset-xxxx-yyyy :8088` to directly tunnel one pod's port into your localhost
|
||||
|
||||
Depending how you configured external access, the URL will vary. Once you've identified the appropriate URL you can log in with:
|
||||
|
||||
* user: `admin`
|
||||
* password: `admin`
|
||||
|
||||
### Important settings
|
||||
|
||||
#### Security settings
|
||||
|
||||
Default security settings and passwords are included but you __SHOULD__ override those with your own, in particular:
|
||||
|
||||
```yaml
|
||||
postgresql:
|
||||
postgresqlPassword: superset
|
||||
```
|
||||
|
||||
#### Dependencies
|
||||
|
||||
You can specify pip packages to be installed before startup, e.g. to install extra database drivers:
|
||||
|
||||
```yaml
|
||||
additionalRequirements:
|
||||
- psycopg2
|
||||
- redis
|
||||
- elasticsearch-dbapi
|
||||
- pymssql
|
||||
- gsheetsdb
|
||||
# Force verstion to work around https://github.com/betodealmeida/gsheets-db-api/issues/15
|
||||
- moz-sql-parser==4.9.21002
|
||||
# For OAuth
|
||||
- Authlib
|
||||
# For webdriver / reports
|
||||
- gevent
|
||||
```
|
||||
|
||||
__WARNING__: The list will replace the default one from the default `values.yaml` entirely, not _add_ to it...
|
||||
|
||||
#### superset_config.py
|
||||
|
||||
The default `superset_config.py` is fairly minimal and you will very likely need to extend it. This is done by specifying one or more key/value entries in `configOverrides`, e.g.:
|
||||
|
||||
```yaml
|
||||
configOverrides:
|
||||
my_override: |
|
||||
# This will make sure the redirect_uri is properly computed, even with SSL offloading
|
||||
ENABLE_PROXY_FIX = True
|
||||
FEATURE_FLAGS = {
|
||||
"DYNAMIC_PLUGINS": True
|
||||
}
|
||||
```
|
||||
|
||||
Those will be evaluated as Helm templates and therefore will be able to reference other `values.yaml` variables e.g. `{{ .Values.ingress.hosts[0] }}` will resolve to your ingress external domain.
|
||||
|
||||
The entire `superset_config.py` will be installed as a secret, so it is safe to pass sensitive parameters directly... however it might be more readable to use secret env variables for that.
|
||||
|
||||
Full python files can be provided by running `helm upgrade --install --values my-values.yaml --set-file configOverrides.oauth=set_oauth.py`
|
||||
|
||||
#### Environment Variables
|
||||
|
||||
Those can be passed as key/values either with `extraEnv` or `extraSecretEnv` if they're sensitive. They can then be referenced from `superset_config.py` using e.g. `os.environ.get("VAR")`.
|
||||
|
||||
```yaml
|
||||
extraEnv:
|
||||
SMTP_HOST: smtp.gmail.com
|
||||
SMTP_USER: user@gmail.com
|
||||
SMTP_PORT: "587"
|
||||
SMTP_MAIL_FROM: user@gmail.com
|
||||
|
||||
extraSecretEnv:
|
||||
SMTP_PASSWORD: xxxx
|
||||
|
||||
configOverrides:
|
||||
smtp: |
|
||||
import ast
|
||||
SMTP_HOST = os.getenv("SMTP_HOST","localhost")
|
||||
SMTP_STARTTLS = ast.literal_eval(os.getenv("SMTP_STARTTLS", "True"))
|
||||
SMTP_SSL = ast.literal_eval(os.getenv("SMTP_SSL", "False"))
|
||||
SMTP_USER = os.getenv("SMTP_USER","superset")
|
||||
SMTP_PORT = os.getenv("SMTP_PORT",25)
|
||||
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD","superset")
|
||||
```
|
||||
|
||||
#### System packages
|
||||
|
||||
If new system packages are required, they can be installed before application startup by overriding the container's `command`, e.g.:
|
||||
|
||||
```yaml
|
||||
supersetWorker:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
apt update
|
||||
apt install -y somepackage
|
||||
apt autoremove -yqq --purge
|
||||
apt clean
|
||||
|
||||
# Run celery worker
|
||||
. {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app worker
|
||||
```
|
||||
|
||||
#### Data sources
|
||||
|
||||
Data source definitions can be automatically declared by providing key/value yaml definitions in `extraConfigs`:
|
||||
|
||||
```yaml
|
||||
extraConfigs:
|
||||
datasources-init.yaml: |
|
||||
databases:
|
||||
- allow_csv_upload: true
|
||||
allow_ctas: true
|
||||
allow_cvas: true
|
||||
database_name: example-db
|
||||
extra: "{\r\n \"metadata_params\": {},\r\n \"engine_params\": {},\r\n \"\
|
||||
metadata_cache_timeout\": {},\r\n \"schemas_allowed_for_csv_upload\": []\r\n\
|
||||
}"
|
||||
sqlalchemy_uri: example://example-db.local
|
||||
tables: []
|
||||
```
|
||||
|
||||
Those will also be mounted as secrets and can include sensitive parameters.
|
||||
|
||||
### Configuration Examples
|
||||
|
||||
#### Setting up OAuth
|
||||
|
||||
```yaml
|
||||
extraEnv:
|
||||
AUTH_DOMAIN: example.com
|
||||
|
||||
extraSecretEnv:
|
||||
GOOGLE_KEY: xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
|
||||
GOOGLE_SECRET: xxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
configOverrides:
|
||||
enable_oauth: |
|
||||
# This will make sure the redirect_uri is properly computed, even with SSL offloading
|
||||
ENABLE_PROXY_FIX = True
|
||||
|
||||
from flask_appbuilder.security.manager import (AUTH_OAUTH, AUTH_DB)
|
||||
AUTH_TYPE = AUTH_OAUTH
|
||||
OAUTH_PROVIDERS = [
|
||||
{
|
||||
"name": "google",
|
||||
"icon": "fa-google",
|
||||
"token_key": "access_token",
|
||||
"remote_app": {
|
||||
"client_id": os.getenv("GOOGLE_KEY"),
|
||||
"client_secret": os.getenv("GOOGLE_SECRET"),
|
||||
"api_base_url": "https://www.googleapis.com/oauth2/v2/",
|
||||
"client_kwargs": {"scope": "email profile"},
|
||||
"request_token_url": None,
|
||||
"access_token_url": "https://accounts.google.com/o/oauth2/token",
|
||||
"authorize_url": "https://accounts.google.com/o/oauth2/auth",
|
||||
"authorize_params": {"hd": os.getenv("AUTH_DOMAIN", "")}
|
||||
},
|
||||
}
|
||||
]
|
||||
|
||||
# Map Authlib roles to superset roles
|
||||
AUTH_ROLE_ADMIN = 'Admin'
|
||||
AUTH_ROLE_PUBLIC = 'Public'
|
||||
|
||||
# Will allow user self registration, allowing to create Flask users from Authorized User
|
||||
AUTH_USER_REGISTRATION = True
|
||||
|
||||
# The default user self registration role
|
||||
AUTH_USER_REGISTRATION_ROLE = "Admin"
|
||||
```
|
||||
|
||||
#### Enable Alerts and Reports
|
||||
|
||||
For this, as per the [Alerts and Reports doc](/docs/installation/email-reports), you will need to:
|
||||
|
||||
##### Install a supported webdriver in the Celery worker
|
||||
|
||||
This is done either by using a custom image that has the webdriver pre-installed, or installing at startup time by overriding the `command`. Here's a working example for `chromedriver`:
|
||||
|
||||
```yaml
|
||||
supersetWorker:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
# Install chrome webdriver
|
||||
# See https://github.com/apache/superset/blob/4fa3b6c7185629b87c27fc2c0e5435d458f7b73d/docs/src/pages/docs/installation/email_reports.mdx
|
||||
apt update
|
||||
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
||||
apt install -y --no-install-recommends ./google-chrome-stable_current_amd64.deb
|
||||
wget https://chromedriver.storage.googleapis.com/88.0.4324.96/chromedriver_linux64.zip
|
||||
unzip chromedriver_linux64.zip
|
||||
chmod +x chromedriver
|
||||
mv chromedriver /usr/bin
|
||||
apt autoremove -yqq --purge
|
||||
apt clean
|
||||
rm -f google-chrome-stable_current_amd64.deb chromedriver_linux64.zip
|
||||
|
||||
# Run
|
||||
. {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app worker
|
||||
```
|
||||
|
||||
##### Run the Celery beat
|
||||
|
||||
This pod will trigger the scheduled tasks configured in the alerts and reports UI section:
|
||||
|
||||
```yaml
|
||||
supersetCeleryBeat:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
##### Configure the appropriate Celery jobs and SMTP/Slack settings
|
||||
|
||||
```yaml
|
||||
extraEnv:
|
||||
SMTP_HOST: smtp.gmail.com
|
||||
SMTP_USER: user@gmail.com
|
||||
SMTP_PORT: "587"
|
||||
SMTP_MAIL_FROM: user@gmail.com
|
||||
|
||||
extraSecretEnv:
|
||||
SLACK_API_TOKEN: xoxb-xxxx-yyyy
|
||||
SMTP_PASSWORD: xxxx-yyyy
|
||||
|
||||
configOverrides:
|
||||
feature_flags: |
|
||||
import ast
|
||||
|
||||
FEATURE_FLAGS = {
|
||||
"ALERT_REPORTS": True
|
||||
}
|
||||
|
||||
SMTP_HOST = os.getenv("SMTP_HOST","localhost")
|
||||
SMTP_STARTTLS = ast.literal_eval(os.getenv("SMTP_STARTTLS", "True"))
|
||||
SMTP_SSL = ast.literal_eval(os.getenv("SMTP_SSL", "False"))
|
||||
SMTP_USER = os.getenv("SMTP_USER","superset")
|
||||
SMTP_PORT = os.getenv("SMTP_PORT",25)
|
||||
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD","superset")
|
||||
SMTP_MAIL_FROM = os.getenv("SMTP_MAIL_FROM","superset@superset.com")
|
||||
|
||||
SLACK_API_TOKEN = os.getenv("SLACK_API_TOKEN",None)
|
||||
celery_conf: |
|
||||
from celery.schedules import crontab
|
||||
|
||||
class CeleryConfig(object):
|
||||
BROKER_URL = f"redis://{env('REDIS_HOST')}:{env('REDIS_PORT')}/0"
|
||||
CELERY_IMPORTS = ('superset.sql_lab', )
|
||||
CELERY_RESULT_BACKEND = f"redis://{env('REDIS_HOST')}:{env('REDIS_PORT')}/0"
|
||||
CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}}
|
||||
CELERY_IMPORTS = ('superset.sql_lab', "superset.tasks", "superset.tasks.thumbnails", )
|
||||
CELERY_ANNOTATIONS = {
|
||||
'sql_lab.get_sql_results': {
|
||||
'rate_limit': '100/s',
|
||||
},
|
||||
'email_reports.send': {
|
||||
'rate_limit': '1/s',
|
||||
'time_limit': 600,
|
||||
'soft_time_limit': 600,
|
||||
'ignore_result': True,
|
||||
},
|
||||
}
|
||||
CELERYBEAT_SCHEDULE = {
|
||||
'reports.scheduler': {
|
||||
'task': 'reports.scheduler',
|
||||
'schedule': crontab(minute='*', hour='*'),
|
||||
},
|
||||
'reports.prune_log': {
|
||||
'task': 'reports.prune_log',
|
||||
'schedule': crontab(minute=0, hour=0),
|
||||
},
|
||||
'cache-warmup-hourly': {
|
||||
'task': 'cache-warmup',
|
||||
'schedule': crontab(minute='*/30', hour='*'),
|
||||
'kwargs': {
|
||||
'strategy_name': 'top_n_dashboards',
|
||||
'top_n': 10,
|
||||
'since': '7 days ago',
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
CELERY_CONFIG = CeleryConfig
|
||||
reports: |
|
||||
EMAIL_PAGE_RENDER_WAIT = 60
|
||||
WEBDRIVER_BASEURL = "http://{{ template "superset.fullname" . }}:{{ .Values.service.port }}/"
|
||||
WEBDRIVER_BASEURL_USER_FRIENDLY = "https://www.example.com/"
|
||||
WEBDRIVER_TYPE= "chrome"
|
||||
WEBDRIVER_OPTION_ARGS = [
|
||||
"--force-device-scale-factor=2.0",
|
||||
"--high-dpi-support=2.0",
|
||||
"--headless",
|
||||
"--disable-gpu",
|
||||
"--disable-dev-shm-usage",
|
||||
# This is required because our process runs as root (in order to install pip packages)
|
||||
"--no-sandbox",
|
||||
"--disable-setuid-sandbox",
|
||||
"--disable-extensions",
|
||||
]
|
||||
```
|
||||
@@ -15,10 +15,10 @@ Here are a **few different ways you can get started with Superset**:
|
||||
- Download the [source from Apache Foundation's website](https://dist.apache.org/repos/dist/release/superset/1.0.0/)
|
||||
- Download the latest Superset version from [Pypi here](https://pypi.org/project/apache-superset/)
|
||||
- Setup Superset locally with one command
|
||||
using [Docker Compose](docs/installation/installing-superset-using-docker-compose)
|
||||
using [Docker Compose](installation/installing-superset-using-docker-compose)
|
||||
- Download the [Docker image](https://hub.docker.com/r/apache/superset) from Dockerhub
|
||||
- Install bleeding-edge master version of Superset
|
||||
[from Github](https://github.com/apache/superset/tree/master/superset)
|
||||
- Install the latest version of Superset
|
||||
[from Github](https://github.com/apache/superset/tree/latest)
|
||||
|
||||
Superset provides:
|
||||
|
||||
@@ -33,7 +33,7 @@ Superset provides:
|
||||
- Integration with major authentication backends (database, OpenID, LDAP, OAuth, REMOTE_USER, etc)
|
||||
- The ability to add custom visualization plugins
|
||||
- An API for programmatic customization
|
||||
- A cloud-native archiecture designed from the ground up for scale
|
||||
- A cloud-native architecture designed from the ground up for scale
|
||||
|
||||
Superset is cloud-native and designed to be highly available. It was designed to scale out to large,
|
||||
distributed environments and works very well inside containers. While you can easily test drive
|
||||
@@ -56,4 +56,4 @@ production environment inside Kubernetes and serves 600+ daily active users view
|
||||
a day.
|
||||
|
||||
You can find a partial list of industries and companies embracing Superset
|
||||
[on this page in GitHub](https://github.com/apache/superset/blob/master/INTHEWILD.md).
|
||||
[on this page in GitHub](https://github.com/apache/superset/blob/master/RESOURCES/INTHEWILD.md).
|
||||
|
||||
@@ -361,7 +361,7 @@ const Theme = () => {
|
||||
title="Integrates with modern databases"
|
||||
descr={`
|
||||
Superset can connect to any SQL based datasource
|
||||
through SQL Alchemy, including modern cloud native databases
|
||||
through SQLAlchemy, including modern cloud native databases
|
||||
and engines at petabyte scale.
|
||||
`}
|
||||
/>
|
||||
|
||||
@@ -48,7 +48,7 @@ export const pmc = [
|
||||
image: 'https://github.com/dpgaspar.png',
|
||||
},
|
||||
{
|
||||
name: 'Erik Ritker',
|
||||
name: 'Erik Ritter',
|
||||
github: 'https://github.com/etr2460',
|
||||
image: 'https://github.com/etr2460.png',
|
||||
},
|
||||
@@ -215,6 +215,16 @@ export const Databases = [
|
||||
href: 'https://www.sqlite.org/index.html',
|
||||
imgName: 'sqllite.png',
|
||||
},
|
||||
{
|
||||
title: 'Trino',
|
||||
href: 'https://trino.io/',
|
||||
imgName: 'trino2.jpg',
|
||||
},
|
||||
{
|
||||
title: 'Rockset',
|
||||
href: 'https://rockset.com/',
|
||||
imgName: 'rockset.png',
|
||||
},
|
||||
{
|
||||
title: 'Vertica',
|
||||
href: 'https://www.vertica.com/',
|
||||
|
||||
@@ -14,12 +14,21 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
apiVersion: v1
|
||||
apiVersion: v2
|
||||
appVersion: "1.0"
|
||||
description: Apache Superset is a modern, enterprise-ready business intelligence web application
|
||||
name: superset
|
||||
maintainers:
|
||||
- name: Chuan-Yen Chiang
|
||||
email: cychiang0823@gmail.com
|
||||
url: https://github.com/cychiang
|
||||
version: 0.1.0
|
||||
- name: craig-rueda
|
||||
email: craig@craigrueda.com
|
||||
url: https://github.com/craig-rueda
|
||||
version: 0.1.2
|
||||
dependencies:
|
||||
- name: postgresql
|
||||
version: 10.2.0
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
condition: postgresql.enabled
|
||||
- name: redis
|
||||
version: 12.3.0
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
condition: redis.enabled
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "superset.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "superset.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:8088 to use your application"
|
||||
kubectl port-forward $POD_NAME 8088:80
|
||||
kubectl port-forward service/superset 8088:8088 --namespace {{ .Release.Namespace }}
|
||||
{{- end }}
|
||||
|
||||
@@ -49,13 +49,6 @@ Create chart name and version as used by the chart label.
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "superset-bootstrap" }}
|
||||
#!/bin/sh
|
||||
|
||||
pip install {{ range .Values.additionalRequirements }}{{ . }} {{ end }}
|
||||
|
||||
{{ end -}}
|
||||
|
||||
{{- define "superset-config" }}
|
||||
import os
|
||||
from cachelib.redis import RedisCache
|
||||
@@ -70,8 +63,8 @@ CACHE_CONFIG = {
|
||||
'CACHE_KEY_PREFIX': 'superset_',
|
||||
'CACHE_REDIS_HOST': env('REDIS_HOST'),
|
||||
'CACHE_REDIS_PORT': env('REDIS_PORT'),
|
||||
'CACHE_REDIS_DB': 1,
|
||||
'CACHE_REDIS_URL': f"redis://{env('REDIS_HOST')}:{env('REDIS_PORT')}/1"
|
||||
'CACHE_REDIS_PASSWORD': env('REDIS_PASSWORD'),
|
||||
'CACHE_REDIS_DB': env('REDIS_DB', 1),
|
||||
}
|
||||
DATA_CACHE_CONFIG = CACHE_CONFIG
|
||||
|
||||
@@ -97,4 +90,13 @@ RESULTS_BACKEND = RedisCache(
|
||||
port=env('REDIS_PORT'),
|
||||
key_prefix='superset_results'
|
||||
)
|
||||
|
||||
{{ if .Values.configOverrides }}
|
||||
# Overrides
|
||||
{{- range $key, $value := .Values.configOverrides }}
|
||||
# {{ $key }}
|
||||
{{ tpl $value $ }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- end }}
|
||||
|
||||
@@ -27,6 +27,6 @@ metadata:
|
||||
data:
|
||||
{{- range $path, $config := .Values.extraConfigs }}
|
||||
{{ $path }}: |
|
||||
{{ tpl $config . | indent 4 -}}
|
||||
{{- tpl $config $ | nindent 4 -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
{{- if .Values.supersetCeleryBeat.enabled -}}
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ template "superset.fullname" . }}-celerybeat
|
||||
labels:
|
||||
app: {{ template "superset.name" . }}-celerybeat
|
||||
chart: {{ template "superset.chart" . }}
|
||||
release: {{ .Release.Name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
{{- if .Values.supersetCeleryBeat.deploymentAnnotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.supersetCeleryBeat.deploymentAnnotations | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
# This must be a singleton
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: {{ template "superset.name" . }}-celerybeat
|
||||
release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
checksum/superset_config.py: {{ include "superset-config" . | sha256sum }}
|
||||
checksum/connections: {{ .Values.supersetNode.connections | toYaml | sha256sum }}
|
||||
checksum/extraConfigs: {{ .Values.extraConfigs | toYaml | sha256sum }}
|
||||
checksum/extraSecrets: {{ .Values.extraSecrets | toYaml | sha256sum }}
|
||||
checksum/extraSecretEnv: {{ .Values.extraSecretEnv | toYaml | sha256sum }}
|
||||
checksum/configOverrides: {{ .Values.configOverrides | toYaml | sha256sum }}
|
||||
{{ if .Values.supersetCeleryBeat.forceReload }}
|
||||
# Optionally force the thing to reload
|
||||
force-reload: {{ randAlphaNum 5 | quote }}
|
||||
{{ end }}
|
||||
{{- if .Values.supersetCeleryBeat.podAnnotations }}
|
||||
{{ toYaml .Values.supersetCeleryBeat.podAnnotations | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
app: {{ template "superset.name" . }}-celerybeat
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
securityContext:
|
||||
runAsUser: {{ .Values.runAsUser }}
|
||||
{{- if .Values.supersetCeleryBeat.initContainers }}
|
||||
initContainers:
|
||||
{{- tpl (toYaml .Values.supersetCeleryBeat.initContainers) . | nindent 6 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
command: {{ tpl (toJson .Values.supersetCeleryBeat.command) . }}
|
||||
env:
|
||||
- name: "SUPERSET_PORT"
|
||||
value: {{ .Values.service.port | quote}}
|
||||
{{ if .Values.extraEnv }}
|
||||
{{- range $key, $value := .Values.extraEnv }}
|
||||
- name: {{ $key | quote}}
|
||||
value: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: {{ tpl .Values.envFromSecret . | quote }}
|
||||
volumeMounts:
|
||||
- name: superset-config
|
||||
mountPath: {{ .Values.configMountPath | quote }}
|
||||
readOnly: true
|
||||
resources:
|
||||
{{ toYaml .Values.resources | indent 12 }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
- name: superset-config
|
||||
secret:
|
||||
secretName: {{ tpl .Values.configFromSecret . }}
|
||||
{{- end -}}
|
||||
@@ -23,6 +23,10 @@ metadata:
|
||||
chart: {{ template "superset.chart" . }}
|
||||
release: {{ .Release.Name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
{{- if .Values.supersetWorker.deploymentAnnotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.supersetWorker.deploymentAnnotations | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
@@ -31,17 +35,26 @@ spec:
|
||||
release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
{{ if .Values.supersetWorker.forceReload }}
|
||||
annotations:
|
||||
checksum/superset_config.py: {{ include "superset-config" . | sha256sum }}
|
||||
checksum/connections: {{ .Values.supersetNode.connections | toYaml | sha256sum }}
|
||||
checksum/extraConfigs: {{ .Values.extraConfigs | toYaml | sha256sum }}
|
||||
checksum/extraSecrets: {{ .Values.extraSecrets | toYaml | sha256sum }}
|
||||
checksum/extraSecretEnv: {{ .Values.extraSecretEnv | toYaml | sha256sum }}
|
||||
checksum/configOverrides: {{ .Values.configOverrides | toYaml | sha256sum }}
|
||||
{{ if .Values.supersetWorker.forceReload }}
|
||||
# Optionally force the thing to reload
|
||||
force-reload: {{ randAlphaNum 5 | quote }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{- if .Values.supersetWorker.podAnnotations }}
|
||||
{{ toYaml .Values.supersetWorker.podAnnotations | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
app: {{ template "superset.name" . }}-worker
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
securityContext:
|
||||
runAsUser: 0 # Needed in order to allow pip install to work in bootstrap
|
||||
runAsUser: {{ .Values.runAsUser }}
|
||||
{{- if .Values.supersetWorker.initContainers }}
|
||||
initContainers:
|
||||
{{- tpl (toYaml .Values.supersetWorker.initContainers) . | nindent 6 }}
|
||||
|
||||
@@ -23,6 +23,10 @@ metadata:
|
||||
chart: {{ template "superset.chart" . }}
|
||||
release: {{ .Release.Name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
{{- if .Values.supersetNode.deploymentAnnotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.supersetNode.deploymentAnnotations | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
@@ -31,17 +35,29 @@ spec:
|
||||
release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
{{ if .Values.supersetNode.forceReload }}
|
||||
annotations:
|
||||
# Force reload on config changes
|
||||
checksum/superset_config.py: {{ include "superset-config" . | sha256sum }}
|
||||
checksum/superset_init.sh: {{ tpl .Values.init.initscript . | sha256sum }}
|
||||
checksum/superset_bootstrap.sh: {{ tpl .Values.bootstrapScript . | sha256sum }}
|
||||
checksum/connections: {{ .Values.supersetNode.connections | toYaml | sha256sum }}
|
||||
checksum/extraConfigs: {{ .Values.extraConfigs | toYaml | sha256sum }}
|
||||
checksum/extraSecrets: {{ .Values.extraSecrets | toYaml | sha256sum }}
|
||||
checksum/extraSecretEnv: {{ .Values.extraSecretEnv | toYaml | sha256sum }}
|
||||
checksum/configOverrides: {{ .Values.configOverrides | toYaml | sha256sum }}
|
||||
{{- if .Values.supersetNode.forceReload }}
|
||||
# Optionally force the thing to reload
|
||||
force-reload: {{ randAlphaNum 5 | quote }}
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
{{- if .Values.supersetNode.podAnnotations }}
|
||||
{{ toYaml .Values.supersetNode.podAnnotations | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
app: {{ template "superset.name" . }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
securityContext:
|
||||
runAsUser: 0 # Needed in order to allow pip install to work in bootstrap
|
||||
runAsUser: {{ .Values.runAsUser }}
|
||||
{{- if .Values.supersetNode.initContainers }}
|
||||
initContainers:
|
||||
{{- tpl (toYaml .Values.supersetNode.initContainers) . | nindent 6 }}
|
||||
@@ -67,6 +83,11 @@ spec:
|
||||
- name: superset-config
|
||||
mountPath: {{ .Values.configMountPath | quote }}
|
||||
readOnly: true
|
||||
{{- if .Values.extraConfigs }}
|
||||
- name: superset-extra-config
|
||||
mountPath: {{ .Values.extraConfigMountPath | quote }}
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.service.port }}
|
||||
@@ -89,3 +110,8 @@ spec:
|
||||
- name: superset-config
|
||||
secret:
|
||||
secretName: {{ tpl .Values.configFromSecret . }}
|
||||
{{- if .Values.extraConfigs }}
|
||||
- name: superset-extra-config
|
||||
configMap:
|
||||
name: {{ template "superset.fullname" . }}-extra-config
|
||||
{{- end }}
|
||||
|
||||
@@ -28,7 +28,7 @@ spec:
|
||||
name: {{ template "superset.name" . }}-init-db
|
||||
spec:
|
||||
securityContext:
|
||||
runAsUser: 0 # Needed in order to allow pip install to work in bootstrap
|
||||
runAsUser: {{ .Values.runAsUser }}
|
||||
{{- if .Values.init.initContainers }}
|
||||
initContainers:
|
||||
{{- tpl (toYaml .Values.init.initContainers) . | nindent 6 }}
|
||||
@@ -57,6 +57,8 @@ spec:
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
command: {{ tpl (toJson .Values.init.command) . }}
|
||||
resources:
|
||||
{{ toYaml .Values.init.resources | indent 10 }}
|
||||
volumes:
|
||||
- name: superset-config
|
||||
secret:
|
||||
|
||||
@@ -24,11 +24,16 @@ metadata:
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
type: Opaque
|
||||
data:
|
||||
REDIS_HOST: {{ tpl .Values.supersetNode.connections.redis_host . | b64enc | quote }}
|
||||
REDIS_PORT: {{ .Values.supersetNode.connections.redis_port | b64enc | quote }}
|
||||
DB_HOST: {{ tpl .Values.supersetNode.connections.db_host . | b64enc | quote }}
|
||||
DB_PORT: {{ .Values.supersetNode.connections.db_port | b64enc | quote }}
|
||||
DB_USER: {{ .Values.supersetNode.connections.db_user | b64enc | quote }}
|
||||
DB_PASS: {{ .Values.supersetNode.connections.db_pass | b64enc | quote }}
|
||||
DB_NAME: {{ .Values.supersetNode.connections.db_name | b64enc | quote }}
|
||||
stringData:
|
||||
REDIS_HOST: {{ tpl .Values.supersetNode.connections.redis_host . | quote }}
|
||||
REDIS_PORT: {{ .Values.supersetNode.connections.redis_port | quote }}
|
||||
DB_HOST: {{ tpl .Values.supersetNode.connections.db_host . | quote }}
|
||||
DB_PORT: {{ .Values.supersetNode.connections.db_port | quote }}
|
||||
DB_USER: {{ .Values.supersetNode.connections.db_user | quote }}
|
||||
DB_PASS: {{ .Values.supersetNode.connections.db_pass | quote }}
|
||||
DB_NAME: {{ .Values.supersetNode.connections.db_name | quote }}
|
||||
{{- if .Values.extraSecretEnv }}
|
||||
{{- range $key, $value := .Values.extraSecretEnv }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
@@ -20,11 +20,21 @@ metadata:
|
||||
name: {{ template "superset.fullname" . }}-config
|
||||
labels:
|
||||
app: {{ template "superset.fullname" . }}
|
||||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
chart: {{ template "superset.chart" . }}
|
||||
release: "{{ .Release.Name }}"
|
||||
heritage: "{{ .Release.Service }}"
|
||||
type: Opaque
|
||||
data:
|
||||
superset_config.py: {{ include "superset-config" . | b64enc }}
|
||||
superset_init.sh: {{ tpl .Values.init.initscript . | b64enc }}
|
||||
superset_bootstrap.sh: {{ include "superset-bootstrap" . | b64enc }}
|
||||
stringData:
|
||||
superset_config.py: |
|
||||
{{- include "superset-config" . | nindent 4 }}
|
||||
superset_init.sh: |
|
||||
{{- tpl .Values.init.initscript . | nindent 4 }}
|
||||
superset_bootstrap.sh: |
|
||||
{{- tpl .Values.bootstrapScript . | nindent 4 }}
|
||||
|
||||
{{- if .Values.extraSecrets }}
|
||||
{{- range $path, $config := .Values.extraSecrets }}
|
||||
{{ $path }}: |
|
||||
{{- tpl $config $ | nindent 4 -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
@@ -23,6 +23,10 @@ metadata:
|
||||
chart: {{ template "superset.chart" . }}
|
||||
release: {{ .Release.Name }}
|
||||
heritage: {{ .Release.Service }}
|
||||
{{- with .Values.service.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
type: {{ .Values.service.type }}
|
||||
ports:
|
||||
@@ -33,3 +37,6 @@ spec:
|
||||
selector:
|
||||
app: {{ template "superset.name" . }}
|
||||
release: {{ .Release.Name }}
|
||||
{{- if .Values.service.loadBalancerIP }}
|
||||
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
|
||||
{{- end }}
|
||||
|
||||
+110
-10
@@ -21,11 +21,19 @@
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
## These requirements are used to build a requirements file which is then applied on init
|
||||
## of superset containers
|
||||
additionalRequirements:
|
||||
- "psycopg2==2.8.5"
|
||||
- "redis==3.2.1"
|
||||
# User ID directive. This user must have enough permissions to run the bootstrap script
|
||||
# Runn containers as root is not recommended in production. Change this to another UID - e.g. 1000 to be more secure
|
||||
runAsUser: 0
|
||||
|
||||
# Install additional packages and do any other bootstrap configuration in this script
|
||||
# For production clusters it's recommended to build own image with this step done in CI
|
||||
bootstrapScript: |
|
||||
#!/bin/bash
|
||||
apt-get update -y &&\
|
||||
apt-get install -y --no-install-recommends nano &&\
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
pip install psycopg2==2.8.5 redis==3.2.1
|
||||
if [ ! -f ~/bootstrap ]; then echo "Running Superset with uid {{ .Values.runAsUser }}" > ~/bootstrap; fi
|
||||
|
||||
## The name of the secret which we will use to generate a superset_config.py file
|
||||
## Note: this secret must have the key superset_config.py in it and can include other files as well
|
||||
@@ -41,6 +49,13 @@ envFromSecret: '{{ template "superset.fullname" . }}-env'
|
||||
##
|
||||
extraEnv: {}
|
||||
|
||||
## Extra environment variables to pass as secrets
|
||||
##
|
||||
extraSecretEnv: {}
|
||||
# MAPBOX_API_KEY: ...
|
||||
# GOOGLE_KEY: ...
|
||||
# GOOGLE_SECRET: ...
|
||||
|
||||
extraConfigs: {}
|
||||
# datasources-init.yaml: |
|
||||
# databases:
|
||||
@@ -54,6 +69,34 @@ extraConfigs: {}
|
||||
# sqlalchemy_uri: example://example-db.local
|
||||
# tables: []
|
||||
|
||||
|
||||
extraSecrets: {}
|
||||
|
||||
|
||||
# A dictionary of overrides to append at the end of superset_config.py - the name does not matter
|
||||
# WARNING: the order is not guaranteed
|
||||
configOverrides: {}
|
||||
# enable_oauth: |
|
||||
# from flask_appbuilder.security.manager import AUTH_DB
|
||||
# AUTH_TYPE = AUTH_OAUTH
|
||||
|
||||
# OAUTH_PROVIDERS = [
|
||||
# {
|
||||
# "name": "google",
|
||||
# "icon": "fa-google",
|
||||
# "token_key": "access_token",
|
||||
# "remote_app": {
|
||||
# "client_id": os.environ.get("GOOGLE_KEY"),
|
||||
# "client_secret": os.environ.get("GOOGLE_SECRET"),
|
||||
# "api_base_url": "https://www.googleapis.com/oauth2/v2/",
|
||||
# "client_kwargs": {"scope": "email profile"},
|
||||
# "request_token_url": None,
|
||||
# "access_token_url": "https://accounts.google.com/o/oauth2/token",
|
||||
# "authorize_url": "https://accounts.google.com/o/oauth2/auth",
|
||||
# },
|
||||
# }
|
||||
# ]
|
||||
|
||||
configMountPath: "/app/pythonpath"
|
||||
|
||||
extraConfigMountPath: "/app/configs"
|
||||
@@ -66,6 +109,9 @@ image:
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 8088
|
||||
annotations: {}
|
||||
# cloud.google.com/load-balancer-type: "Internal"
|
||||
loadBalancerIP: null
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
@@ -117,6 +163,12 @@ supersetNode:
|
||||
name: '{{ tpl .Values.envFromSecret . }}'
|
||||
command: [ "/bin/sh", "-c", "until nc -zv $DB_HOST $DB_PORT -w1; do echo 'waiting for db'; sleep 1; done" ]
|
||||
|
||||
## Annotations to be added to supersetNode deployment
|
||||
deploymentAnnotations: {}
|
||||
|
||||
## Annotations to be added to supersetNode pods
|
||||
podAnnotations: {}
|
||||
|
||||
##
|
||||
## Superset worker configuration
|
||||
supersetWorker:
|
||||
@@ -134,15 +186,62 @@ supersetWorker:
|
||||
name: '{{ tpl .Values.envFromSecret . }}'
|
||||
command: [ "/bin/sh", "-c", "until nc -zv $DB_HOST $DB_PORT -w1; do echo 'waiting for db'; sleep 1; done" ]
|
||||
|
||||
## Annotations to be added to supersetWorker deployment
|
||||
deploymentAnnotations: {}
|
||||
|
||||
## Annotations to be added to supersetWorker pods
|
||||
podAnnotations: {}
|
||||
|
||||
##
|
||||
## Superset beat configuration (to trigger scheduled jobs like reports)
|
||||
supersetCeleryBeat:
|
||||
# This is only required if you intend to use alerts and reports
|
||||
enabled: false
|
||||
command:
|
||||
- "/bin/sh"
|
||||
- "-c"
|
||||
- ". {{ .Values.configMountPath }}/superset_bootstrap.sh; celery beat --app=superset.tasks.celery_app:app --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedule"
|
||||
forceReload: false # If true, forces deployment to reload on each upgrade
|
||||
initContainers:
|
||||
- name: wait-for-postgres
|
||||
image: busybox:latest
|
||||
imagePullPolicy: IfNotPresent
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: '{{ tpl .Values.envFromSecret . }}'
|
||||
command: [ "/bin/sh", "-c", "until nc -zv $DB_HOST $DB_PORT -w1; do echo 'waiting for db'; sleep 1; done" ]
|
||||
|
||||
## Annotations to be added to supersetCeleryBeat deployment
|
||||
deploymentAnnotations: {}
|
||||
|
||||
## Annotations to be added to supersetCeleryBeat pods
|
||||
podAnnotations: {}
|
||||
|
||||
##
|
||||
## Init job configuration
|
||||
init:
|
||||
# Configure resources
|
||||
# Warning: fab commant consumes a lot of ram and can
|
||||
# cause the process to be killed due to OOM if it exceeds limit
|
||||
resources: {}
|
||||
# limits:
|
||||
# cpu:
|
||||
# memory:
|
||||
# requests:
|
||||
# cpu:
|
||||
# memory:
|
||||
command:
|
||||
- "/bin/sh"
|
||||
- "-c"
|
||||
- ". {{ .Values.configMountPath }}/superset_bootstrap.sh; . {{ .Values.configMountPath }}/superset_init.sh"
|
||||
enabled: true
|
||||
loadExamples: false
|
||||
adminUser:
|
||||
username: admin
|
||||
firstname: Superset
|
||||
lastname: Admin
|
||||
email: admin@superset.com
|
||||
password: admin
|
||||
initContainers:
|
||||
- name: wait-for-postgres
|
||||
image: busybox:latest
|
||||
@@ -159,11 +258,12 @@ init:
|
||||
superset init
|
||||
echo "Creating admin user..."
|
||||
superset fab create-admin \
|
||||
--username admin \
|
||||
--firstname Superset \
|
||||
--lastname Admin \
|
||||
--email admin@superset.com \
|
||||
--password admin || true
|
||||
--username {{ .Values.init.adminUser.username }} \
|
||||
--firstname {{ .Values.init.adminUser.firstname }} \
|
||||
--lastname {{ .Values.init.adminUser.lastname }} \
|
||||
--email {{ .Values.init.adminUser.email }} \
|
||||
--password {{ .Values.init.adminUser.password }} \
|
||||
|| true
|
||||
{{ if .Values.init.loadExamples }}
|
||||
echo "Loading examples..."
|
||||
superset load_examples
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
---
|
||||
rules:
|
||||
braces:
|
||||
min-spaces-inside: 0
|
||||
max-spaces-inside: 0
|
||||
min-spaces-inside-empty: -1
|
||||
max-spaces-inside-empty: -1
|
||||
brackets:
|
||||
min-spaces-inside: -1
|
||||
max-spaces-inside: -1
|
||||
min-spaces-inside-empty: -1
|
||||
max-spaces-inside-empty: -1
|
||||
colons:
|
||||
max-spaces-before: 0
|
||||
max-spaces-after: 1
|
||||
commas:
|
||||
max-spaces-before: 0
|
||||
min-spaces-after: 1
|
||||
max-spaces-after: 1
|
||||
comments:
|
||||
require-starting-space: false
|
||||
min-spaces-from-content: -1
|
||||
document-end: disable
|
||||
document-start: disable # No --- to start a file
|
||||
empty-lines:
|
||||
max: 2
|
||||
max-start: 0
|
||||
max-end: 0
|
||||
hyphens:
|
||||
max-spaces-after: 1
|
||||
indentation:
|
||||
spaces: consistent
|
||||
indent-sequences: whatever # - list indentation will handle both indentation and without
|
||||
check-multi-line-strings: false
|
||||
key-duplicates: enable
|
||||
line-length: disable # Lines can be any length
|
||||
new-line-at-end-of-file: enable
|
||||
new-lines:
|
||||
type: unix
|
||||
trailing-spaces: enable
|
||||
truthy:
|
||||
level: warning
|
||||
+293
-101
@@ -5,107 +5,299 @@
|
||||
#
|
||||
# pip-compile-multi
|
||||
#
|
||||
-e file:. # via -r requirements/base.in
|
||||
aiohttp==3.7.2 # via slackclient
|
||||
alembic==1.4.3 # via flask-migrate
|
||||
amqp==2.6.1 # via kombu
|
||||
apispec[yaml]==3.3.2 # via flask-appbuilder
|
||||
async-timeout==3.0.1 # via aiohttp
|
||||
attrs==20.2.0 # via aiohttp, jsonschema
|
||||
babel==2.8.0 # via flask-babel
|
||||
backoff==1.10.0 # via apache-superset
|
||||
billiard==3.6.3.0 # via celery
|
||||
bleach==3.2.1 # via apache-superset
|
||||
brotli==1.0.9 # via flask-compress
|
||||
cachelib==0.1.1 # via apache-superset
|
||||
celery==4.4.7 # via apache-superset
|
||||
cffi==1.14.3 # via cryptography
|
||||
chardet==3.0.4 # via aiohttp
|
||||
click==7.1.2 # via apache-superset, flask, flask-appbuilder
|
||||
colorama==0.4.4 # via apache-superset, flask-appbuilder
|
||||
contextlib2==0.6.0.post1 # via apache-superset
|
||||
convertdate==2.3.0 # via holidays
|
||||
cron-descriptor==1.2.24 # via apache-superset
|
||||
croniter==0.3.36 # via apache-superset
|
||||
cryptography==3.2.1 # via apache-superset
|
||||
decorator==4.4.2 # via retry
|
||||
defusedxml==0.6.0 # via python3-openid
|
||||
dnspython==2.0.0 # via email-validator
|
||||
email-validator==1.1.1 # via flask-appbuilder
|
||||
flask-appbuilder==3.1.1 # via apache-superset
|
||||
flask-babel==1.0.0 # via flask-appbuilder
|
||||
flask-caching==1.9.0 # via apache-superset
|
||||
flask-compress==1.8.0 # via apache-superset
|
||||
flask-jwt-extended==3.24.1 # via flask-appbuilder
|
||||
flask-login==0.4.1 # via flask-appbuilder
|
||||
flask-migrate==2.5.3 # via apache-superset
|
||||
flask-openid==1.2.5 # via flask-appbuilder
|
||||
flask-sqlalchemy==2.4.4 # via flask-appbuilder, flask-migrate
|
||||
flask-talisman==0.7.0 # via apache-superset
|
||||
flask-wtf==0.14.3 # via apache-superset, flask-appbuilder
|
||||
flask==1.1.2 # via apache-superset, flask-appbuilder, flask-babel, flask-caching, flask-compress, flask-jwt-extended, flask-login, flask-migrate, flask-openid, flask-sqlalchemy, flask-wtf
|
||||
geographiclib==1.50 # via geopy
|
||||
geopy==2.0.0 # via apache-superset
|
||||
gunicorn==20.0.4 # via apache-superset
|
||||
holidays==0.10.3 # via apache-superset
|
||||
humanize==3.1.0 # via apache-superset
|
||||
idna==2.10 # via email-validator, yarl
|
||||
importlib-metadata==2.1.1 # via -r requirements/base.in, jsonschema, kombu, markdown
|
||||
isodate==0.6.0 # via apache-superset
|
||||
itsdangerous==1.1.0 # via flask, flask-wtf
|
||||
jinja2==2.11.3 # via flask, flask-babel
|
||||
jsonschema==3.2.0 # via flask-appbuilder
|
||||
kombu==4.6.11 # via celery
|
||||
korean-lunar-calendar==0.2.1 # via holidays
|
||||
mako==1.1.3 # via alembic
|
||||
markdown==3.3.3 # via apache-superset
|
||||
markupsafe==1.1.1 # via jinja2, mako, wtforms
|
||||
marshmallow-enum==1.5.1 # via flask-appbuilder
|
||||
marshmallow-sqlalchemy==0.23.1 # via flask-appbuilder
|
||||
marshmallow==3.9.0 # via flask-appbuilder, marshmallow-enum, marshmallow-sqlalchemy
|
||||
msgpack==1.0.0 # via apache-superset
|
||||
multidict==5.0.0 # via aiohttp, yarl
|
||||
natsort==7.0.1 # via croniter
|
||||
numpy==1.19.4 # via pandas, pyarrow
|
||||
packaging==20.4 # via bleach
|
||||
pandas==1.1.4 # via apache-superset
|
||||
parsedatetime==2.6 # via apache-superset
|
||||
pathlib2==2.3.5 # via apache-superset
|
||||
pgsanity==0.2.9 # via apache-superset
|
||||
polyline==1.4.0 # via apache-superset
|
||||
prison==0.1.3 # via flask-appbuilder
|
||||
py==1.9.0 # via retry
|
||||
pyarrow==1.0.1 # via apache-superset
|
||||
pycparser==2.20 # via cffi
|
||||
pyjwt==1.7.1 # via apache-superset, flask-appbuilder, flask-jwt-extended
|
||||
pymeeus==0.3.7 # via convertdate
|
||||
pyparsing==2.4.7 # via apache-superset, packaging
|
||||
pyrsistent==0.16.1 # via -r requirements/base.in, jsonschema
|
||||
python-dateutil==2.8.1 # via alembic, apache-superset, croniter, flask-appbuilder, holidays, pandas
|
||||
python-dotenv==0.15.0 # via apache-superset
|
||||
python-editor==1.0.4 # via alembic
|
||||
python-geohash==0.8.5 # via apache-superset
|
||||
python3-openid==3.2.0 # via flask-openid
|
||||
pytz==2020.4 # via babel, celery, convertdate, flask-babel, pandas
|
||||
pyyaml==5.3.1 # via apache-superset, apispec
|
||||
redis==3.5.3 # via apache-superset
|
||||
retry==0.9.2 # via apache-superset
|
||||
selenium==3.141.0 # via apache-superset
|
||||
simplejson==3.17.2 # via apache-superset
|
||||
six==1.15.0 # via bleach, cryptography, flask-jwt-extended, flask-talisman, holidays, isodate, jsonschema, packaging, pathlib2, polyline, prison, pyrsistent, python-dateutil, sqlalchemy-utils, wtforms-json
|
||||
slackclient==2.5.0 # via apache-superset
|
||||
sqlalchemy-utils==0.36.8 # via apache-superset, flask-appbuilder
|
||||
sqlalchemy==1.3.20 # via alembic, apache-superset, flask-sqlalchemy, marshmallow-sqlalchemy, sqlalchemy-utils
|
||||
sqlparse==0.3.0 # via apache-superset
|
||||
typing-extensions==3.7.4.3 # via aiohttp, apache-superset, yarl
|
||||
urllib3==1.25.11 # via selenium
|
||||
vine==1.3.0 # via amqp, celery
|
||||
webencodings==0.5.1 # via bleach
|
||||
werkzeug==1.0.1 # via flask, flask-jwt-extended
|
||||
wtforms-json==0.3.3 # via apache-superset
|
||||
wtforms==2.3.3 # via flask-wtf, wtforms-json
|
||||
yarl==1.6.2 # via aiohttp
|
||||
zipp==3.4.0 # via importlib-metadata
|
||||
-e file:.
|
||||
# via -r requirements/base.in
|
||||
aiohttp==3.7.2
|
||||
# via slackclient
|
||||
alembic==1.4.3
|
||||
# via flask-migrate
|
||||
amqp==2.6.1
|
||||
# via kombu
|
||||
apispec[yaml]==3.3.2
|
||||
# via flask-appbuilder
|
||||
async-timeout==3.0.1
|
||||
# via aiohttp
|
||||
attrs==20.2.0
|
||||
# via
|
||||
# aiohttp
|
||||
# jsonschema
|
||||
babel==2.8.0
|
||||
# via flask-babel
|
||||
backoff==1.10.0
|
||||
# via apache-superset
|
||||
billiard==3.6.3.0
|
||||
# via celery
|
||||
bleach==3.2.1
|
||||
# via apache-superset
|
||||
brotli==1.0.9
|
||||
# via flask-compress
|
||||
cachelib==0.1.1
|
||||
# via apache-superset
|
||||
celery==4.4.7
|
||||
# via apache-superset
|
||||
cffi==1.14.3
|
||||
# via cryptography
|
||||
chardet==3.0.4
|
||||
# via aiohttp
|
||||
click==7.1.2
|
||||
# via
|
||||
# apache-superset
|
||||
# flask
|
||||
# flask-appbuilder
|
||||
colorama==0.4.4
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
contextlib2==0.6.0.post1
|
||||
# via apache-superset
|
||||
convertdate==2.3.0
|
||||
# via holidays
|
||||
cron-descriptor==1.2.24
|
||||
# via apache-superset
|
||||
croniter==0.3.36
|
||||
# via apache-superset
|
||||
cryptography==3.2.1
|
||||
# via apache-superset
|
||||
decorator==4.4.2
|
||||
# via retry
|
||||
defusedxml==0.6.0
|
||||
# via python3-openid
|
||||
dnspython==2.0.0
|
||||
# via email-validator
|
||||
email-validator==1.1.1
|
||||
# via flask-appbuilder
|
||||
flask-appbuilder==3.2.1
|
||||
# via apache-superset
|
||||
flask-babel==1.0.0
|
||||
# via flask-appbuilder
|
||||
flask-caching==1.9.0
|
||||
# via apache-superset
|
||||
flask-compress==1.8.0
|
||||
# via apache-superset
|
||||
flask-jwt-extended==3.24.1
|
||||
# via flask-appbuilder
|
||||
flask-login==0.4.1
|
||||
# via flask-appbuilder
|
||||
flask-migrate==2.5.3
|
||||
# via apache-superset
|
||||
flask-openid==1.2.5
|
||||
# via flask-appbuilder
|
||||
flask-sqlalchemy==2.4.4
|
||||
# via
|
||||
# flask-appbuilder
|
||||
# flask-migrate
|
||||
flask-talisman==0.7.0
|
||||
# via apache-superset
|
||||
flask-wtf==0.14.3
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
flask==1.1.2
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
# flask-babel
|
||||
# flask-caching
|
||||
# flask-compress
|
||||
# flask-jwt-extended
|
||||
# flask-login
|
||||
# flask-migrate
|
||||
# flask-openid
|
||||
# flask-sqlalchemy
|
||||
# flask-wtf
|
||||
geographiclib==1.50
|
||||
# via geopy
|
||||
geopy==2.0.0
|
||||
# via apache-superset
|
||||
graphlib-backport==1.0.3
|
||||
# via apache-superset
|
||||
gunicorn==20.0.4
|
||||
# via apache-superset
|
||||
holidays==0.10.3
|
||||
# via apache-superset
|
||||
humanize==3.1.0
|
||||
# via apache-superset
|
||||
idna==2.10
|
||||
# via
|
||||
# email-validator
|
||||
# yarl
|
||||
importlib-metadata==2.1.1
|
||||
# via -r requirements/base.in
|
||||
isodate==0.6.0
|
||||
# via apache-superset
|
||||
itsdangerous==1.1.0
|
||||
# via
|
||||
# flask
|
||||
# flask-wtf
|
||||
jinja2==2.11.3
|
||||
# via
|
||||
# flask
|
||||
# flask-babel
|
||||
jsonschema==3.2.0
|
||||
# via flask-appbuilder
|
||||
kombu==4.6.11
|
||||
# via celery
|
||||
korean-lunar-calendar==0.2.1
|
||||
# via holidays
|
||||
mako==1.1.3
|
||||
# via alembic
|
||||
markdown==3.3.3
|
||||
# via apache-superset
|
||||
markupsafe==1.1.1
|
||||
# via
|
||||
# jinja2
|
||||
# mako
|
||||
# wtforms
|
||||
marshmallow-enum==1.5.1
|
||||
# via flask-appbuilder
|
||||
marshmallow-sqlalchemy==0.23.1
|
||||
# via flask-appbuilder
|
||||
marshmallow==3.9.0
|
||||
# via
|
||||
# flask-appbuilder
|
||||
# marshmallow-enum
|
||||
# marshmallow-sqlalchemy
|
||||
msgpack==1.0.0
|
||||
# via apache-superset
|
||||
multidict==5.0.0
|
||||
# via
|
||||
# aiohttp
|
||||
# yarl
|
||||
natsort==7.0.1
|
||||
# via croniter
|
||||
numpy==1.19.4
|
||||
# via
|
||||
# pandas
|
||||
# pyarrow
|
||||
packaging==20.4
|
||||
# via bleach
|
||||
pandas==1.2.2
|
||||
# via apache-superset
|
||||
parsedatetime==2.6
|
||||
# via apache-superset
|
||||
pathlib2==2.3.5
|
||||
# via apache-superset
|
||||
pgsanity==0.2.9
|
||||
# via apache-superset
|
||||
polyline==1.4.0
|
||||
# via apache-superset
|
||||
prison==0.1.3
|
||||
# via flask-appbuilder
|
||||
py==1.9.0
|
||||
# via retry
|
||||
pyarrow==3.0.0
|
||||
# via apache-superset
|
||||
pycparser==2.20
|
||||
# via cffi
|
||||
pyjwt==1.7.1
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
# flask-jwt-extended
|
||||
pymeeus==0.3.7
|
||||
# via convertdate
|
||||
pyparsing==2.4.7
|
||||
# via
|
||||
# apache-superset
|
||||
# packaging
|
||||
pyrsistent==0.16.1
|
||||
# via
|
||||
# -r requirements/base.in
|
||||
# jsonschema
|
||||
python-dateutil==2.8.1
|
||||
# via
|
||||
# alembic
|
||||
# apache-superset
|
||||
# croniter
|
||||
# flask-appbuilder
|
||||
# holidays
|
||||
# pandas
|
||||
python-dotenv==0.15.0
|
||||
# via apache-superset
|
||||
python-editor==1.0.4
|
||||
# via alembic
|
||||
python-geohash==0.8.5
|
||||
# via apache-superset
|
||||
python3-openid==3.2.0
|
||||
# via flask-openid
|
||||
pytz==2020.4
|
||||
# via
|
||||
# babel
|
||||
# celery
|
||||
# convertdate
|
||||
# flask-babel
|
||||
# pandas
|
||||
pyyaml==5.4.1
|
||||
# via
|
||||
# apache-superset
|
||||
# apispec
|
||||
redis==3.5.3
|
||||
# via apache-superset
|
||||
retry==0.9.2
|
||||
# via apache-superset
|
||||
selenium==3.141.0
|
||||
# via apache-superset
|
||||
simplejson==3.17.2
|
||||
# via apache-superset
|
||||
six==1.15.0
|
||||
# via
|
||||
# bleach
|
||||
# cryptography
|
||||
# flask-jwt-extended
|
||||
# flask-talisman
|
||||
# holidays
|
||||
# isodate
|
||||
# jsonschema
|
||||
# packaging
|
||||
# pathlib2
|
||||
# polyline
|
||||
# prison
|
||||
# pyrsistent
|
||||
# python-dateutil
|
||||
# sqlalchemy-utils
|
||||
# wtforms-json
|
||||
slackclient==2.5.0
|
||||
# via apache-superset
|
||||
sqlalchemy-utils==0.36.8
|
||||
# via
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
sqlalchemy==1.3.20
|
||||
# via
|
||||
# alembic
|
||||
# apache-superset
|
||||
# flask-appbuilder
|
||||
# flask-sqlalchemy
|
||||
# marshmallow-sqlalchemy
|
||||
# sqlalchemy-utils
|
||||
sqlparse==0.3.0
|
||||
# via apache-superset
|
||||
typing-extensions==3.7.4.3
|
||||
# via
|
||||
# aiohttp
|
||||
# apache-superset
|
||||
urllib3==1.25.11
|
||||
# via selenium
|
||||
vine==1.3.0
|
||||
# via
|
||||
# amqp
|
||||
# celery
|
||||
webencodings==0.5.1
|
||||
# via bleach
|
||||
werkzeug==1.0.1
|
||||
# via
|
||||
# flask
|
||||
# flask-jwt-extended
|
||||
wtforms-json==0.3.3
|
||||
# via apache-superset
|
||||
wtforms==2.3.3
|
||||
# via
|
||||
# flask-wtf
|
||||
# wtforms-json
|
||||
yarl==1.6.2
|
||||
# via aiohttp
|
||||
zipp==3.4.0
|
||||
# via importlib-metadata
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user