You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by dp...@apache.org on 2021/08/10 16:19:43 UTC
[superset] branch master updated: feat(cross-filters): add support
for temporal filters (#16139)
This is an automated email from the ASF dual-hosted git repository.
dpgaspar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 63ace7b feat(cross-filters): add support for temporal filters (#16139)
63ace7b is described below
commit 63ace7b2884bacf507bd7cecef57573ef7352aed
Author: Ville Brofeldt <33...@users.noreply.github.com>
AuthorDate: Tue Aug 10 19:18:46 2021 +0300
feat(cross-filters): add support for temporal filters (#16139)
* feat(cross-filters): add support for temporal filters
* fix test
* make filter optional
* remove mocks
* fix more tests
* remove unnecessary optionality
* fix even more tests
* bump superset-ui
* add isExtra to schema
* address comments
* fix presto test
---
superset-frontend/package-lock.json | 604 ++++++++++++++--------------
superset-frontend/package.json | 56 +--
superset/charts/schemas.py | 14 +
superset/common/query_object.py | 5 +-
superset/connectors/sqla/models.py | 65 +--
superset/db_engine_specs/base.py | 4 +-
superset/typing.py | 2 +-
superset/utils/core.py | 94 +++--
superset/viz.py | 6 +-
tests/integration_tests/model_tests.py | 9 +-
tests/integration_tests/utils/core_tests.py | 51 ++-
tests/integration_tests/utils_tests.py | 60 +--
tests/integration_tests/viz_tests.py | 12 +-
13 files changed, 543 insertions(+), 439 deletions(-)
diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index e75cf48..5413ef2 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -15,35 +15,35 @@
"@emotion/babel-preset-css-prop": "^11.2.0",
"@emotion/cache": "^11.1.3",
"@emotion/react": "^11.1.5",
- "@superset-ui/chart-controls": "^0.17.79",
- "@superset-ui/core": "^0.17.75",
- "@superset-ui/legacy-plugin-chart-calendar": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-chord": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-country-map": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-event-flow": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-force-directed": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-heatmap": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-histogram": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-horizon": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-map-box": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-partition": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-rose": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-sankey": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-sunburst": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-treemap": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-world-map": "^0.17.79",
- "@superset-ui/legacy-preset-chart-big-number": "^0.17.79",
+ "@superset-ui/chart-controls": "^0.17.80",
+ "@superset-ui/core": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-calendar": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-chord": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-country-map": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-event-flow": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-force-directed": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-heatmap": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-histogram": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-horizon": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-map-box": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-partition": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-rose": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-sankey": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-sunburst": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-treemap": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-world-map": "^0.17.80",
+ "@superset-ui/legacy-preset-chart-big-number": "^0.17.80",
"@superset-ui/legacy-preset-chart-deckgl": "^0.4.9",
- "@superset-ui/legacy-preset-chart-nvd3": "^0.17.79",
- "@superset-ui/plugin-chart-echarts": "^0.17.79",
- "@superset-ui/plugin-chart-pivot-table": "^0.17.79",
- "@superset-ui/plugin-chart-table": "^0.17.79",
- "@superset-ui/plugin-chart-word-cloud": "^0.17.79",
- "@superset-ui/preset-chart-xy": "^0.17.79",
+ "@superset-ui/legacy-preset-chart-nvd3": "^0.17.80",
+ "@superset-ui/plugin-chart-echarts": "^0.17.80",
+ "@superset-ui/plugin-chart-pivot-table": "^0.17.80",
+ "@superset-ui/plugin-chart-table": "^0.17.80",
+ "@superset-ui/plugin-chart-word-cloud": "^0.17.80",
+ "@superset-ui/preset-chart-xy": "^0.17.80",
"@vx/responsive": "^0.0.195",
"abortcontroller-polyfill": "^1.1.9",
"antd": "^4.9.4",
@@ -11687,12 +11687,12 @@
}
},
"node_modules/@superset-ui/chart-controls": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/chart-controls/-/chart-controls-0.17.79.tgz",
- "integrity": "sha512-Mdgi6/ZYZHrDSyA88+JJZGyp2g0ZVM/2n1aNkKk9pQYr4E7W8OcvFX4HksjyWvicEsR8sQR3q3PczHUuwbm5OA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/chart-controls/-/chart-controls-0.17.80.tgz",
+ "integrity": "sha512-40H8LPvAsl2Y7UrLMA8DoK7zpNcxPeWPPyb1WIaRVXyZS7F8IeapSuDgj7SnnYGZ6O6zNnS95x2WX7hB4owKZQ==",
"dependencies": {
"@react-icons/all-files": "^4.1.0",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/core": "0.17.80",
"lodash": "^4.17.15",
"prop-types": "^15.7.2"
},
@@ -11703,9 +11703,9 @@
}
},
"node_modules/@superset-ui/core": {
- "version": "0.17.75",
- "resolved": "https://registry.npmjs.org/@superset-ui/core/-/core-0.17.75.tgz",
- "integrity": "sha512-9g9YiQzsI4PFi9963DnizVghuejpHKSnbjGyyYkZa3SDSqTMLFkj4tuBd/s+Skayoo1DNoxzD2ZMMw41D81RcA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/core/-/core-0.17.80.tgz",
+ "integrity": "sha512-BrUF4ba6SyKyjRsDu4y67pywq8LJYVX7vpJ98qOR1Hu634H9a5in5PVu8N03tpfaQXpdao00YfP6T/3bTWMkmA==",
"dependencies": {
"@babel/runtime": "^7.1.2",
"@emotion/styled": "^11.3.0",
@@ -11827,12 +11827,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-calendar": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-calendar/-/legacy-plugin-chart-calendar-0.17.79.tgz",
- "integrity": "sha512-hgKVzR0m0eS6hP2BTk7f3dY/FnWDWKsNDmSie9TbFn04XdOYnf4H6p253rf+sI0TtQ6/G2DM39nKxUehm8wJfQ==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-calendar/-/legacy-plugin-chart-calendar-0.17.80.tgz",
+ "integrity": "sha512-dFRBDDbSmPfA+EI31F5dWQdNZRlR6COPr+5NQXzXm7HGcHpBfmI4YjCzeLgwJxtOWjvl1k7yEs+dfdV3Vc6tuA==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3-array": "^2.0.3",
"d3-selection": "^1.4.0",
"d3-tip": "^0.9.1",
@@ -11851,24 +11851,24 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-chord": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-chord/-/legacy-plugin-chart-chord-0.17.79.tgz",
- "integrity": "sha512-okUKLettzXkqkcZ4GpeA8IchK6FMrb9CjuRYNB8U3jdXypNdwbYN1EKkuAm4H0AUvk3oBhr1k/2BTkG1y8UGeg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-chord/-/legacy-plugin-chart-chord-0.17.80.tgz",
+ "integrity": "sha512-jhOvHRbG3p1HZa5t22jFphhs3OBfoz+Tfh4YtllLCBmezP0A+a/GxLERknBJyHiXLRWl7cWiLILrD5/D4rkVWA==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"prop-types": "^15.6.2",
"react": "^16.13.1"
}
},
"node_modules/@superset-ui/legacy-plugin-chart-country-map": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-country-map/-/legacy-plugin-chart-country-map-0.17.79.tgz",
- "integrity": "sha512-xQFCQ5Baf14HU/NOCLcCjRobGz+pYrjkz3aYXuj+db6xjz1wVdZUBtLM2atD7TzHM7Yn5jHdpQa8XRUUHQc2cg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-country-map/-/legacy-plugin-chart-country-map-0.17.80.tgz",
+ "integrity": "sha512-IqAPteHUyt75TiouAWkDNcxSZrC4PT5CaP0jsjtVpbtww3bhS6R7tnB2onOhb5mqTNhkkqHxBxuFHPYwtjdGPw==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-array": "^2.0.3",
"prop-types": "^15.6.2"
@@ -11883,13 +11883,13 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-event-flow": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-event-flow/-/legacy-plugin-chart-event-flow-0.17.79.tgz",
- "integrity": "sha512-hC0sen6ojNaZ+WIOtzEjEafPK2uJDUP3yF1dx9Z2QuoYATHthz74X5KHKWit/l5qi/R4jEH5ORw4M4qAFytwDw==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-event-flow/-/legacy-plugin-chart-event-flow-0.17.80.tgz",
+ "integrity": "sha512-CODDrH4tGbHRomKlPlHtLxA8S6d1keTKxle3ADp440WR+JvuttNgT9+LdB/8eO8zMoU1g11CViFIW5duWZ+pnA==",
"dependencies": {
"@data-ui/event-flow": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"prop-types": "^15.6.2"
},
"peerDependencies": {
@@ -11897,12 +11897,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-force-directed": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-force-directed/-/legacy-plugin-chart-force-directed-0.17.79.tgz",
- "integrity": "sha512-nhXyFgXuLqxURu5qFHc66NaD8T/8nBmNQEzDjJ+o7qrrMJeldgzAEjZGjoN1O014qiktA/D+nNKtyVmGeGRbIg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-force-directed/-/legacy-plugin-chart-force-directed-0.17.80.tgz",
+ "integrity": "sha512-W6MU/DY9ZAPDf5Q0cO9VyvrEic8wBiaSPMPNQ40IQv6UYmukjPoZhWhyQUex7ieCsqqKANCPbARPAK+F3/Y/uA==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"prop-types": "^15.7.2"
},
@@ -11911,12 +11911,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-heatmap": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-heatmap/-/legacy-plugin-chart-heatmap-0.17.79.tgz",
- "integrity": "sha512-EkcK1d/1F91Eu3+/7RqeUuBJgYebaFATI+nrRmcZ9S80V+iEw9V/9d9dm7UetSxMA2afcK2gNrvTcZ86x5z1Sw==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-heatmap/-/legacy-plugin-chart-heatmap-0.17.80.tgz",
+ "integrity": "sha512-jn6U0fOvUo62wCyMmeCgSUYpjGTrHbhxPi4zZ3JmamkPnXsMxz8c57B7G2cNk9/WpntxJfw7urHjEvlGRZ/L9w==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-svg-legend": "^1.x",
"d3-tip": "^0.9.1",
@@ -11924,14 +11924,14 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-histogram": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-histogram/-/legacy-plugin-chart-histogram-0.17.79.tgz",
- "integrity": "sha512-v9j3s11yqv5KgLwn7UIXoDzkBvkCnGt94l8Mh3QMWWfqSt2EENWVQSQ+yc9wV4ytpbIZepY+z8BDC6TWAiZdwg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-histogram/-/legacy-plugin-chart-histogram-0.17.80.tgz",
+ "integrity": "sha512-RoUJN0w4KFSva9A6tI3wz0IPqzP6ZojpjQWu/Xs95pgZsbHPhz3beTrpv28QaOV8zAEWoTM01u+piASAbPOIVg==",
"dependencies": {
"@data-ui/histogram": "^0.0.84",
"@data-ui/theme": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@vx/legend": "^0.0.198",
"@vx/responsive": "^0.0.199",
"@vx/scale": "^0.0.197",
@@ -12000,12 +12000,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-horizon": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-horizon/-/legacy-plugin-chart-horizon-0.17.79.tgz",
- "integrity": "sha512-rG+PBv6sPkDKQ1ycfusdgq3oUwv6cv1n4hIfoETelsSMqx2PNtwh4gWA4eWqBp2OJR59huAMuUzsvB3xdcNCJA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-horizon/-/legacy-plugin-chart-horizon-0.17.80.tgz",
+ "integrity": "sha512-db2QyGn95Y71wAOdiircDYjmSimmKCNdZ8NjwhXvtreCjDT5IYU3jX14hHQ4HVD/R0PkcZSth4Xg33T0FMBxBw==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3-array": "^2.0.3",
"d3-scale": "^3.0.1",
"prop-types": "^15.6.2"
@@ -12035,12 +12035,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-map-box": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-map-box/-/legacy-plugin-chart-map-box-0.17.79.tgz",
- "integrity": "sha512-dlO+miiN9jnb3lCY1UwMSws/tr/wO6NBMRHeAzIh+j7I7qcDDtSuNnTG3kBc1LnvP6wqMhgCKU2e63K3aG0gYA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-map-box/-/legacy-plugin-chart-map-box-0.17.80.tgz",
+ "integrity": "sha512-ajaJr3LPuibV5orFfQ2wEnsDadowapTrBYWnPz9LQb0o9DKMXrNKlwuYYKb1xm+7ZdVghFajvoYKQqH9Mm1GAw==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"immutable": "^3.8.2",
"mapbox-gl": "^0.53.0",
"prop-types": "^15.6.2",
@@ -12061,12 +12061,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-paired-t-test": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-paired-t-test/-/legacy-plugin-chart-paired-t-test-0.17.79.tgz",
- "integrity": "sha512-KWJvuXyM6viUVrARD33tupIjV2L6UGXkp64o3SnRybCuXFUbrLYrCfRlbv+t0IaSt8QgYvM2qT7pCt8iQ5RzMg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-paired-t-test/-/legacy-plugin-chart-paired-t-test-0.17.80.tgz",
+ "integrity": "sha512-bKiHHOM20AooaMMAQDoHMUJjbaN6MftCtYLSXIhoS5vd4d7F6sIkOOtIjxlR/FbmDA5Dcg97hz8M7H3idCtZtg==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"distributions": "^1.0.0",
"prop-types": "^15.6.2",
"reactable": "^1.1.0"
@@ -12076,12 +12076,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-parallel-coordinates": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-parallel-coordinates/-/legacy-plugin-chart-parallel-coordinates-0.17.79.tgz",
- "integrity": "sha512-aliDFjhVuojAXkSeisMZ2uuRK++09A9aCchM1DTiHsI44ZT5GJoUi6Te5Rm/kNRKGyHfFjrXGJmJ3wbJaqxUOA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-parallel-coordinates/-/legacy-plugin-chart-parallel-coordinates-0.17.80.tgz",
+ "integrity": "sha512-8W8NhdUbZJrhFcjtOMoEfHv2QXIom0xncJW9xi/HFLsw3j8lbsKw0hfXs+DeqTFITa8ThxqUiw0c8vCiQ94iig==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"prop-types": "^15.7.2"
},
@@ -12090,12 +12090,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-partition": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-partition/-/legacy-plugin-chart-partition-0.17.79.tgz",
- "integrity": "sha512-Xh7Ozb+IweXX2SVuQeXlXnVXw2neErTLJ2rFzZz4voyZvcGH93C/rfeKT25QQwButfcfFI6SIXCAXgIwJ0VsRw==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-partition/-/legacy-plugin-chart-partition-0.17.80.tgz",
+ "integrity": "sha512-IohJ9/iXTjHZdbEYNe09ALy6AT0wBTovGFps6BUNJXPu8i/QrDDr+1gB5cLxw+lb0M4OS+huDd6bn14A2HczSQ==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-hierarchy": "^1.1.8",
"prop-types": "^15.6.2"
@@ -12105,24 +12105,24 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-pivot-table": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-pivot-table/-/legacy-plugin-chart-pivot-table-0.17.79.tgz",
- "integrity": "sha512-GsVxldm0sRbd9jjGKmgaQ8uyqwlVBr/CYiifsxVRP3VcHRYaMX+1JgYMeko7mImbOpoo4GR1lnQvbzQCWH0yFg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-pivot-table/-/legacy-plugin-chart-pivot-table-0.17.80.tgz",
+ "integrity": "sha512-NF1yMET2MQ1FeBe3pPbNYtyftI12lC5DkDg/diblQq99CU3e8LfAsLuGOWVZiq6TSzFjySs4BaVTBt7BBL0YpQ==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"datatables.net-bs": "^1.10.15",
"prop-types": "^15.6.2"
}
},
"node_modules/@superset-ui/legacy-plugin-chart-rose": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-rose/-/legacy-plugin-chart-rose-0.17.79.tgz",
- "integrity": "sha512-rDT+C+3a8gMnA+QCatETSJ3GL3IPsiZ2aHWCXWdcbZo5exNwLYD8gZfyHf8do6LLBc46tSrErE8bXs5TDV2LYg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-rose/-/legacy-plugin-chart-rose-0.17.80.tgz",
+ "integrity": "sha512-JJWre7sJkCPrOEM/tlWCAzKGoYO/3VKgNf25luo7P0aMRFAjXYH6AHXqsitQMsUzgMQQ+53+6lE/RS2U9ukHzQ==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"nvd3": "1.8.6",
"prop-types": "^15.6.2"
@@ -12132,12 +12132,12 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-sankey": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey/-/legacy-plugin-chart-sankey-0.17.79.tgz",
- "integrity": "sha512-3AMEH15bOInmSHF87f3lgSS9vwKTMYjo67h4NhIflfXMR3EveXCA8dIIJfgS6xYSmaGEE7OL6aeeQE5+rnj4pQ==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey/-/legacy-plugin-chart-sankey-0.17.80.tgz",
+ "integrity": "sha512-AT7Gm8oUCSqabtVR8OqhOhaNDArl/MFDlV4I2uKN/PdPr8FA8aJCPi0Ud9t6GpUxPMdV6wVUfnW8XfIJdRzwGA==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-sankey": "^0.4.2",
"prop-types": "^15.6.2"
@@ -12147,47 +12147,47 @@
}
},
"node_modules/@superset-ui/legacy-plugin-chart-sankey-loop": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey-loop/-/legacy-plugin-chart-sankey-loop-0.17.79.tgz",
- "integrity": "sha512-OdFBPQbE+vkN/fw9XqeM7lZ8f0xB2itXiwyOKei6MeC6G1cN45/DUlnTAY436ulRvZFhwLhel7g91TN8djSDoA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey-loop/-/legacy-plugin-chart-sankey-loop-0.17.80.tgz",
+ "integrity": "sha512-qivsrBeObFF9ZeAcxyQva4cbA5CgDg6ia9oYWrv6ARWWPqJ121n2UyNbKJd9sGMi85cKT09uVjDNx36Od/7mKA==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3-sankey-diagram": "^0.7.3",
"d3-selection": "^1.4.0",
"prop-types": "^15.6.2"
}
},
"node_modules/@superset-ui/legacy-plugin-chart-sunburst": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sunburst/-/legacy-plugin-chart-sunburst-0.17.79.tgz",
- "integrity": "sha512-VmRsKn/XHUlDKrQ2AQ+C1TRXIJ6m6ittKKuXMqz0XxZWs3jn5RUkNv0W8GuYg814abmZl/e1e0/3lgmYX6LyZg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sunburst/-/legacy-plugin-chart-sunburst-0.17.80.tgz",
+ "integrity": "sha512-WAChRf6ECGMltGUEyhpLGWgrysktrChuCJl6BN28l2+/l+w0hIQmdNhtpO+PDLiaUGKCb19pAyr0jUuPoUB3/A==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"prop-types": "^15.6.2"
}
},
"node_modules/@superset-ui/legacy-plugin-chart-treemap": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-treemap/-/legacy-plugin-chart-treemap-0.17.79.tgz",
- "integrity": "sha512-b204bAeVodLiYyzout0a4HXmltptXD/81kX8aA94IIDCAoA7QhbAvb9W9wZcQiDJQwu7MVsS+KPqyyv35Mxo8A==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-treemap/-/legacy-plugin-chart-treemap-0.17.80.tgz",
+ "integrity": "sha512-zm6kDJrSqlOdjp7mmuOCgHVXsjENptAccbon9LHuWcHWp2xByfqgykBNkKoh2v4KMulEmg6JIPI3AzGHJEh8mw==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3-hierarchy": "^1.1.8",
"d3-selection": "^1.4.0",
"prop-types": "^15.6.2"
}
},
"node_modules/@superset-ui/legacy-plugin-chart-world-map": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-world-map/-/legacy-plugin-chart-world-map-0.17.79.tgz",
- "integrity": "sha512-4iVqpwn4zlI9T4b9venoRLgoEy0+lZKaWbccmUkXPvYL+gpUtkB3z7KuFfp/MWWyruLRCKCd1z2Fedm4wv8ELA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-world-map/-/legacy-plugin-chart-world-map-0.17.80.tgz",
+ "integrity": "sha512-F173Yo6YUXiqH6ZrCZmtRT38b13Bf0Iq4jI3B9POu7fgZWJXmhFVGKzgjPMau5t/5BLjTnyKoTRZ28UqFOomCg==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-array": "^2.4.0",
"d3-color": "^1.4.1",
@@ -12212,13 +12212,13 @@
"integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
},
"node_modules/@superset-ui/legacy-preset-chart-big-number": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-big-number/-/legacy-preset-chart-big-number-0.17.79.tgz",
- "integrity": "sha512-+OjEbyYugynYGbnobP6pNI59bMXfsaqgX6z+oz7fxCtb5BWxTiciz9W7aKhAqT6XM+I8gkkHUKFj76cyjawY5g==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-big-number/-/legacy-preset-chart-big-number-0.17.80.tgz",
+ "integrity": "sha512-mwG2fvMIACPlVNnWlXS7Il48AI/TGqVXxEs6LVutyKJXxb9Yrl63hDaWzod7otAF5QW2qsMM17IvEljA8EGpiA==",
"dependencies": {
"@data-ui/xy-chart": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@types/d3-color": "^1.2.2",
"@types/shortid": "^0.0.29",
"d3-color": "^1.2.3",
@@ -12259,13 +12259,13 @@
}
},
"node_modules/@superset-ui/legacy-preset-chart-nvd3": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-nvd3/-/legacy-preset-chart-nvd3-0.17.79.tgz",
- "integrity": "sha512-hmBof4w5aF6wZag+wnqQCCYjnxul2KBWqRAj0gWQYohUwgqxxuR3CaEwTP62SNVvmnt8R2iCHM9RpIxfcWpjeQ==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-nvd3/-/legacy-preset-chart-nvd3-0.17.80.tgz",
+ "integrity": "sha512-pWeL/9Es3pwYgm7rENXLoH3FAuTrA5cw02aE+lhClVTJVMruPi39yT3O0cfPx2JAsKhmENR7OFu+nG8wSwd7tw==",
"dependencies": {
"@data-ui/xy-chart": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-tip": "^0.9.1",
"dompurify": "^2.0.6",
@@ -12282,12 +12282,12 @@
}
},
"node_modules/@superset-ui/plugin-chart-echarts": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-echarts/-/plugin-chart-echarts-0.17.79.tgz",
- "integrity": "sha512-+lZO5hbQC47G8dDvyqeI4dBsjD2CRSQDqCGFXoecnhKZTzRw3zLX7TYckCK6ZxvLDbgW0ncjRBdcCJtvFs+MAw==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-echarts/-/plugin-chart-echarts-0.17.80.tgz",
+ "integrity": "sha512-Oz1BQI6IvtYAU1zsZvMzT8WPL7234OcLTmM/pfRRLbjDsY942tioGHAr/kOfnoeVmgtdhrZDt3ch1n+vrvK6Aw==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@types/mathjs": "^6.0.7",
"d3-array": "^1.2.0",
"echarts": "^5.1.2",
@@ -12299,12 +12299,12 @@
}
},
"node_modules/@superset-ui/plugin-chart-pivot-table": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-pivot-table/-/plugin-chart-pivot-table-0.17.79.tgz",
- "integrity": "sha512-sz3FfM8Odm+r094rNCRO1DGxMNZl8j0ySnwFYQTbdZNFgqUvcQme9x7QC51IBk3OQ/TOm8oMJG5hTV1/4HrCKA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-pivot-table/-/plugin-chart-pivot-table-0.17.80.tgz",
+ "integrity": "sha512-JP+fS5++2u1Cr+FjNETllJWwAauuXJGJ2q5Gv0mMAw+kB/9i5yZKRvM6VQyL4NvYO4VqYjL5g440G0OLqGeQ6A==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@superset-ui/react-pivottable": "^0.12.11"
},
"peerDependencies": {
@@ -12313,13 +12313,13 @@
}
},
"node_modules/@superset-ui/plugin-chart-table": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.17.79.tgz",
- "integrity": "sha512-gPXgLJntH72ligPD0V6XNT5Cj6eWzztL154/uhUf8qxXKSBB5wETrFqtIl00S99wJQeaPRN6UGER/eiuGqGOTA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.17.80.tgz",
+ "integrity": "sha512-0404twIq84jGiKbC/yfQwbYFh0RNBn8qMJnRO3oCtzvVmF3gelm8+mGKtUnxpd/OC6wiAXyorfoF3mlSW615oA==",
"dependencies": {
"@react-icons/all-files": "^4.1.0",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@types/d3-array": "^2.9.0",
"@types/react-table": "^7.0.29",
"d3-array": "^2.4.0",
@@ -12344,12 +12344,12 @@
}
},
"node_modules/@superset-ui/plugin-chart-word-cloud": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-word-cloud/-/plugin-chart-word-cloud-0.17.79.tgz",
- "integrity": "sha512-EpHMJ1Qd7GnykEjlC+3bOzzBauLTFwZZuFFuCHs8m0exozuFaHQS1VxmpR1h3zJsp6pjF3PRFU05fpQ5LUAbnA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-word-cloud/-/plugin-chart-word-cloud-0.17.80.tgz",
+ "integrity": "sha512-BBXJywPpF5q5y/+7S4PxJFajEufcURKgbTDbVE2uVj85v5m1XtdM5UpvjJ6O4AmksxKD3J1PfSBXtXehttf3hg==",
"dependencies": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@types/d3-cloud": "^1.2.1",
"@types/d3-scale": "^2.0.2",
"d3-cloud": "^1.2.5",
@@ -12382,14 +12382,14 @@
}
},
"node_modules/@superset-ui/preset-chart-xy": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/preset-chart-xy/-/preset-chart-xy-0.17.79.tgz",
- "integrity": "sha512-JisKp00zIVa8VKSBXG1HNDj6hcRf70kHAGuSXHrQ8BUdfhy9Xc20oUMMFKeWSi0cc5NzPkgGg9Vl/vd3fvsO8Q==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/preset-chart-xy/-/preset-chart-xy-0.17.80.tgz",
+ "integrity": "sha512-AfxeBs9w0D7Af5NAKeJ1PmMfitjodpR2AELlsx1s9VkVXoz4Y3FgY9YkUCsphietzjF7Z1kSPYXPLY+wa57oMQ==",
"dependencies": {
"@data-ui/theme": "^0.0.84",
"@data-ui/xy-chart": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@vx/axis": "^0.0.198",
"@vx/legend": "^0.0.198",
"@vx/scale": "^0.0.197",
@@ -60548,20 +60548,20 @@
}
},
"@superset-ui/chart-controls": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/chart-controls/-/chart-controls-0.17.79.tgz",
- "integrity": "sha512-Mdgi6/ZYZHrDSyA88+JJZGyp2g0ZVM/2n1aNkKk9pQYr4E7W8OcvFX4HksjyWvicEsR8sQR3q3PczHUuwbm5OA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/chart-controls/-/chart-controls-0.17.80.tgz",
+ "integrity": "sha512-40H8LPvAsl2Y7UrLMA8DoK7zpNcxPeWPPyb1WIaRVXyZS7F8IeapSuDgj7SnnYGZ6O6zNnS95x2WX7hB4owKZQ==",
"requires": {
"@react-icons/all-files": "^4.1.0",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/core": "0.17.80",
"lodash": "^4.17.15",
"prop-types": "^15.7.2"
}
},
"@superset-ui/core": {
- "version": "0.17.75",
- "resolved": "https://registry.npmjs.org/@superset-ui/core/-/core-0.17.75.tgz",
- "integrity": "sha512-9g9YiQzsI4PFi9963DnizVghuejpHKSnbjGyyYkZa3SDSqTMLFkj4tuBd/s+Skayoo1DNoxzD2ZMMw41D81RcA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/core/-/core-0.17.80.tgz",
+ "integrity": "sha512-BrUF4ba6SyKyjRsDu4y67pywq8LJYVX7vpJ98qOR1Hu634H9a5in5PVu8N03tpfaQXpdao00YfP6T/3bTWMkmA==",
"requires": {
"@babel/runtime": "^7.1.2",
"@emotion/styled": "^11.3.0",
@@ -60681,12 +60681,12 @@
}
},
"@superset-ui/legacy-plugin-chart-calendar": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-calendar/-/legacy-plugin-chart-calendar-0.17.79.tgz",
- "integrity": "sha512-hgKVzR0m0eS6hP2BTk7f3dY/FnWDWKsNDmSie9TbFn04XdOYnf4H6p253rf+sI0TtQ6/G2DM39nKxUehm8wJfQ==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-calendar/-/legacy-plugin-chart-calendar-0.17.80.tgz",
+ "integrity": "sha512-dFRBDDbSmPfA+EI31F5dWQdNZRlR6COPr+5NQXzXm7HGcHpBfmI4YjCzeLgwJxtOWjvl1k7yEs+dfdV3Vc6tuA==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3-array": "^2.0.3",
"d3-selection": "^1.4.0",
"d3-tip": "^0.9.1",
@@ -60704,24 +60704,24 @@
}
},
"@superset-ui/legacy-plugin-chart-chord": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-chord/-/legacy-plugin-chart-chord-0.17.79.tgz",
- "integrity": "sha512-okUKLettzXkqkcZ4GpeA8IchK6FMrb9CjuRYNB8U3jdXypNdwbYN1EKkuAm4H0AUvk3oBhr1k/2BTkG1y8UGeg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-chord/-/legacy-plugin-chart-chord-0.17.80.tgz",
+ "integrity": "sha512-jhOvHRbG3p1HZa5t22jFphhs3OBfoz+Tfh4YtllLCBmezP0A+a/GxLERknBJyHiXLRWl7cWiLILrD5/D4rkVWA==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"prop-types": "^15.6.2",
"react": "^16.13.1"
}
},
"@superset-ui/legacy-plugin-chart-country-map": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-country-map/-/legacy-plugin-chart-country-map-0.17.79.tgz",
- "integrity": "sha512-xQFCQ5Baf14HU/NOCLcCjRobGz+pYrjkz3aYXuj+db6xjz1wVdZUBtLM2atD7TzHM7Yn5jHdpQa8XRUUHQc2cg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-country-map/-/legacy-plugin-chart-country-map-0.17.80.tgz",
+ "integrity": "sha512-IqAPteHUyt75TiouAWkDNcxSZrC4PT5CaP0jsjtVpbtww3bhS6R7tnB2onOhb5mqTNhkkqHxBxuFHPYwtjdGPw==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-array": "^2.0.3",
"prop-types": "^15.6.2"
@@ -60738,34 +60738,34 @@
}
},
"@superset-ui/legacy-plugin-chart-event-flow": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-event-flow/-/legacy-plugin-chart-event-flow-0.17.79.tgz",
- "integrity": "sha512-hC0sen6ojNaZ+WIOtzEjEafPK2uJDUP3yF1dx9Z2QuoYATHthz74X5KHKWit/l5qi/R4jEH5ORw4M4qAFytwDw==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-event-flow/-/legacy-plugin-chart-event-flow-0.17.80.tgz",
+ "integrity": "sha512-CODDrH4tGbHRomKlPlHtLxA8S6d1keTKxle3ADp440WR+JvuttNgT9+LdB/8eO8zMoU1g11CViFIW5duWZ+pnA==",
"requires": {
"@data-ui/event-flow": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"prop-types": "^15.6.2"
}
},
"@superset-ui/legacy-plugin-chart-force-directed": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-force-directed/-/legacy-plugin-chart-force-directed-0.17.79.tgz",
- "integrity": "sha512-nhXyFgXuLqxURu5qFHc66NaD8T/8nBmNQEzDjJ+o7qrrMJeldgzAEjZGjoN1O014qiktA/D+nNKtyVmGeGRbIg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-force-directed/-/legacy-plugin-chart-force-directed-0.17.80.tgz",
+ "integrity": "sha512-W6MU/DY9ZAPDf5Q0cO9VyvrEic8wBiaSPMPNQ40IQv6UYmukjPoZhWhyQUex7ieCsqqKANCPbARPAK+F3/Y/uA==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"prop-types": "^15.7.2"
}
},
"@superset-ui/legacy-plugin-chart-heatmap": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-heatmap/-/legacy-plugin-chart-heatmap-0.17.79.tgz",
- "integrity": "sha512-EkcK1d/1F91Eu3+/7RqeUuBJgYebaFATI+nrRmcZ9S80V+iEw9V/9d9dm7UetSxMA2afcK2gNrvTcZ86x5z1Sw==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-heatmap/-/legacy-plugin-chart-heatmap-0.17.80.tgz",
+ "integrity": "sha512-jn6U0fOvUo62wCyMmeCgSUYpjGTrHbhxPi4zZ3JmamkPnXsMxz8c57B7G2cNk9/WpntxJfw7urHjEvlGRZ/L9w==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-svg-legend": "^1.x",
"d3-tip": "^0.9.1",
@@ -60773,14 +60773,14 @@
}
},
"@superset-ui/legacy-plugin-chart-histogram": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-histogram/-/legacy-plugin-chart-histogram-0.17.79.tgz",
- "integrity": "sha512-v9j3s11yqv5KgLwn7UIXoDzkBvkCnGt94l8Mh3QMWWfqSt2EENWVQSQ+yc9wV4ytpbIZepY+z8BDC6TWAiZdwg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-histogram/-/legacy-plugin-chart-histogram-0.17.80.tgz",
+ "integrity": "sha512-RoUJN0w4KFSva9A6tI3wz0IPqzP6ZojpjQWu/Xs95pgZsbHPhz3beTrpv28QaOV8zAEWoTM01u+piASAbPOIVg==",
"requires": {
"@data-ui/histogram": "^0.0.84",
"@data-ui/theme": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@vx/legend": "^0.0.198",
"@vx/responsive": "^0.0.199",
"@vx/scale": "^0.0.197",
@@ -60848,12 +60848,12 @@
}
},
"@superset-ui/legacy-plugin-chart-horizon": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-horizon/-/legacy-plugin-chart-horizon-0.17.79.tgz",
- "integrity": "sha512-rG+PBv6sPkDKQ1ycfusdgq3oUwv6cv1n4hIfoETelsSMqx2PNtwh4gWA4eWqBp2OJR59huAMuUzsvB3xdcNCJA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-horizon/-/legacy-plugin-chart-horizon-0.17.80.tgz",
+ "integrity": "sha512-db2QyGn95Y71wAOdiircDYjmSimmKCNdZ8NjwhXvtreCjDT5IYU3jX14hHQ4HVD/R0PkcZSth4Xg33T0FMBxBw==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3-array": "^2.0.3",
"d3-scale": "^3.0.1",
"prop-types": "^15.6.2"
@@ -60882,12 +60882,12 @@
}
},
"@superset-ui/legacy-plugin-chart-map-box": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-map-box/-/legacy-plugin-chart-map-box-0.17.79.tgz",
- "integrity": "sha512-dlO+miiN9jnb3lCY1UwMSws/tr/wO6NBMRHeAzIh+j7I7qcDDtSuNnTG3kBc1LnvP6wqMhgCKU2e63K3aG0gYA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-map-box/-/legacy-plugin-chart-map-box-0.17.80.tgz",
+ "integrity": "sha512-ajaJr3LPuibV5orFfQ2wEnsDadowapTrBYWnPz9LQb0o9DKMXrNKlwuYYKb1xm+7ZdVghFajvoYKQqH9Mm1GAw==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"immutable": "^3.8.2",
"mapbox-gl": "^0.53.0",
"prop-types": "^15.6.2",
@@ -60904,118 +60904,118 @@
}
},
"@superset-ui/legacy-plugin-chart-paired-t-test": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-paired-t-test/-/legacy-plugin-chart-paired-t-test-0.17.79.tgz",
- "integrity": "sha512-KWJvuXyM6viUVrARD33tupIjV2L6UGXkp64o3SnRybCuXFUbrLYrCfRlbv+t0IaSt8QgYvM2qT7pCt8iQ5RzMg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-paired-t-test/-/legacy-plugin-chart-paired-t-test-0.17.80.tgz",
+ "integrity": "sha512-bKiHHOM20AooaMMAQDoHMUJjbaN6MftCtYLSXIhoS5vd4d7F6sIkOOtIjxlR/FbmDA5Dcg97hz8M7H3idCtZtg==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"distributions": "^1.0.0",
"prop-types": "^15.6.2",
"reactable": "^1.1.0"
}
},
"@superset-ui/legacy-plugin-chart-parallel-coordinates": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-parallel-coordinates/-/legacy-plugin-chart-parallel-coordinates-0.17.79.tgz",
- "integrity": "sha512-aliDFjhVuojAXkSeisMZ2uuRK++09A9aCchM1DTiHsI44ZT5GJoUi6Te5Rm/kNRKGyHfFjrXGJmJ3wbJaqxUOA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-parallel-coordinates/-/legacy-plugin-chart-parallel-coordinates-0.17.80.tgz",
+ "integrity": "sha512-8W8NhdUbZJrhFcjtOMoEfHv2QXIom0xncJW9xi/HFLsw3j8lbsKw0hfXs+DeqTFITa8ThxqUiw0c8vCiQ94iig==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"prop-types": "^15.7.2"
}
},
"@superset-ui/legacy-plugin-chart-partition": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-partition/-/legacy-plugin-chart-partition-0.17.79.tgz",
- "integrity": "sha512-Xh7Ozb+IweXX2SVuQeXlXnVXw2neErTLJ2rFzZz4voyZvcGH93C/rfeKT25QQwButfcfFI6SIXCAXgIwJ0VsRw==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-partition/-/legacy-plugin-chart-partition-0.17.80.tgz",
+ "integrity": "sha512-IohJ9/iXTjHZdbEYNe09ALy6AT0wBTovGFps6BUNJXPu8i/QrDDr+1gB5cLxw+lb0M4OS+huDd6bn14A2HczSQ==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-hierarchy": "^1.1.8",
"prop-types": "^15.6.2"
}
},
"@superset-ui/legacy-plugin-chart-pivot-table": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-pivot-table/-/legacy-plugin-chart-pivot-table-0.17.79.tgz",
- "integrity": "sha512-GsVxldm0sRbd9jjGKmgaQ8uyqwlVBr/CYiifsxVRP3VcHRYaMX+1JgYMeko7mImbOpoo4GR1lnQvbzQCWH0yFg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-pivot-table/-/legacy-plugin-chart-pivot-table-0.17.80.tgz",
+ "integrity": "sha512-NF1yMET2MQ1FeBe3pPbNYtyftI12lC5DkDg/diblQq99CU3e8LfAsLuGOWVZiq6TSzFjySs4BaVTBt7BBL0YpQ==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"datatables.net-bs": "^1.10.15",
"prop-types": "^15.6.2"
}
},
"@superset-ui/legacy-plugin-chart-rose": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-rose/-/legacy-plugin-chart-rose-0.17.79.tgz",
- "integrity": "sha512-rDT+C+3a8gMnA+QCatETSJ3GL3IPsiZ2aHWCXWdcbZo5exNwLYD8gZfyHf8do6LLBc46tSrErE8bXs5TDV2LYg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-rose/-/legacy-plugin-chart-rose-0.17.80.tgz",
+ "integrity": "sha512-JJWre7sJkCPrOEM/tlWCAzKGoYO/3VKgNf25luo7P0aMRFAjXYH6AHXqsitQMsUzgMQQ+53+6lE/RS2U9ukHzQ==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"nvd3": "1.8.6",
"prop-types": "^15.6.2"
}
},
"@superset-ui/legacy-plugin-chart-sankey": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey/-/legacy-plugin-chart-sankey-0.17.79.tgz",
- "integrity": "sha512-3AMEH15bOInmSHF87f3lgSS9vwKTMYjo67h4NhIflfXMR3EveXCA8dIIJfgS6xYSmaGEE7OL6aeeQE5+rnj4pQ==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey/-/legacy-plugin-chart-sankey-0.17.80.tgz",
+ "integrity": "sha512-AT7Gm8oUCSqabtVR8OqhOhaNDArl/MFDlV4I2uKN/PdPr8FA8aJCPi0Ud9t6GpUxPMdV6wVUfnW8XfIJdRzwGA==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-sankey": "^0.4.2",
"prop-types": "^15.6.2"
}
},
"@superset-ui/legacy-plugin-chart-sankey-loop": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey-loop/-/legacy-plugin-chart-sankey-loop-0.17.79.tgz",
- "integrity": "sha512-OdFBPQbE+vkN/fw9XqeM7lZ8f0xB2itXiwyOKei6MeC6G1cN45/DUlnTAY436ulRvZFhwLhel7g91TN8djSDoA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey-loop/-/legacy-plugin-chart-sankey-loop-0.17.80.tgz",
+ "integrity": "sha512-qivsrBeObFF9ZeAcxyQva4cbA5CgDg6ia9oYWrv6ARWWPqJ121n2UyNbKJd9sGMi85cKT09uVjDNx36Od/7mKA==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3-sankey-diagram": "^0.7.3",
"d3-selection": "^1.4.0",
"prop-types": "^15.6.2"
}
},
"@superset-ui/legacy-plugin-chart-sunburst": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sunburst/-/legacy-plugin-chart-sunburst-0.17.79.tgz",
- "integrity": "sha512-VmRsKn/XHUlDKrQ2AQ+C1TRXIJ6m6ittKKuXMqz0XxZWs3jn5RUkNv0W8GuYg814abmZl/e1e0/3lgmYX6LyZg==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sunburst/-/legacy-plugin-chart-sunburst-0.17.80.tgz",
+ "integrity": "sha512-WAChRf6ECGMltGUEyhpLGWgrysktrChuCJl6BN28l2+/l+w0hIQmdNhtpO+PDLiaUGKCb19pAyr0jUuPoUB3/A==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"prop-types": "^15.6.2"
}
},
"@superset-ui/legacy-plugin-chart-treemap": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-treemap/-/legacy-plugin-chart-treemap-0.17.79.tgz",
- "integrity": "sha512-b204bAeVodLiYyzout0a4HXmltptXD/81kX8aA94IIDCAoA7QhbAvb9W9wZcQiDJQwu7MVsS+KPqyyv35Mxo8A==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-treemap/-/legacy-plugin-chart-treemap-0.17.80.tgz",
+ "integrity": "sha512-zm6kDJrSqlOdjp7mmuOCgHVXsjENptAccbon9LHuWcHWp2xByfqgykBNkKoh2v4KMulEmg6JIPI3AzGHJEh8mw==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3-hierarchy": "^1.1.8",
"d3-selection": "^1.4.0",
"prop-types": "^15.6.2"
}
},
"@superset-ui/legacy-plugin-chart-world-map": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-world-map/-/legacy-plugin-chart-world-map-0.17.79.tgz",
- "integrity": "sha512-4iVqpwn4zlI9T4b9venoRLgoEy0+lZKaWbccmUkXPvYL+gpUtkB3z7KuFfp/MWWyruLRCKCd1z2Fedm4wv8ELA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-world-map/-/legacy-plugin-chart-world-map-0.17.80.tgz",
+ "integrity": "sha512-F173Yo6YUXiqH6ZrCZmtRT38b13Bf0Iq4jI3B9POu7fgZWJXmhFVGKzgjPMau5t/5BLjTnyKoTRZ28UqFOomCg==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-array": "^2.4.0",
"d3-color": "^1.4.1",
@@ -61039,13 +61039,13 @@
}
},
"@superset-ui/legacy-preset-chart-big-number": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-big-number/-/legacy-preset-chart-big-number-0.17.79.tgz",
- "integrity": "sha512-+OjEbyYugynYGbnobP6pNI59bMXfsaqgX6z+oz7fxCtb5BWxTiciz9W7aKhAqT6XM+I8gkkHUKFj76cyjawY5g==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-big-number/-/legacy-preset-chart-big-number-0.17.80.tgz",
+ "integrity": "sha512-mwG2fvMIACPlVNnWlXS7Il48AI/TGqVXxEs6LVutyKJXxb9Yrl63hDaWzod7otAF5QW2qsMM17IvEljA8EGpiA==",
"requires": {
"@data-ui/xy-chart": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@types/d3-color": "^1.2.2",
"@types/shortid": "^0.0.29",
"d3-color": "^1.2.3",
@@ -61078,13 +61078,13 @@
}
},
"@superset-ui/legacy-preset-chart-nvd3": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-nvd3/-/legacy-preset-chart-nvd3-0.17.79.tgz",
- "integrity": "sha512-hmBof4w5aF6wZag+wnqQCCYjnxul2KBWqRAj0gWQYohUwgqxxuR3CaEwTP62SNVvmnt8R2iCHM9RpIxfcWpjeQ==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-nvd3/-/legacy-preset-chart-nvd3-0.17.80.tgz",
+ "integrity": "sha512-pWeL/9Es3pwYgm7rENXLoH3FAuTrA5cw02aE+lhClVTJVMruPi39yT3O0cfPx2JAsKhmENR7OFu+nG8wSwd7tw==",
"requires": {
"@data-ui/xy-chart": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"d3": "^3.5.17",
"d3-tip": "^0.9.1",
"dompurify": "^2.0.6",
@@ -61098,12 +61098,12 @@
}
},
"@superset-ui/plugin-chart-echarts": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-echarts/-/plugin-chart-echarts-0.17.79.tgz",
- "integrity": "sha512-+lZO5hbQC47G8dDvyqeI4dBsjD2CRSQDqCGFXoecnhKZTzRw3zLX7TYckCK6ZxvLDbgW0ncjRBdcCJtvFs+MAw==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-echarts/-/plugin-chart-echarts-0.17.80.tgz",
+ "integrity": "sha512-Oz1BQI6IvtYAU1zsZvMzT8WPL7234OcLTmM/pfRRLbjDsY942tioGHAr/kOfnoeVmgtdhrZDt3ch1n+vrvK6Aw==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@types/mathjs": "^6.0.7",
"d3-array": "^1.2.0",
"echarts": "^5.1.2",
@@ -61112,23 +61112,23 @@
}
},
"@superset-ui/plugin-chart-pivot-table": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-pivot-table/-/plugin-chart-pivot-table-0.17.79.tgz",
- "integrity": "sha512-sz3FfM8Odm+r094rNCRO1DGxMNZl8j0ySnwFYQTbdZNFgqUvcQme9x7QC51IBk3OQ/TOm8oMJG5hTV1/4HrCKA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-pivot-table/-/plugin-chart-pivot-table-0.17.80.tgz",
+ "integrity": "sha512-JP+fS5++2u1Cr+FjNETllJWwAauuXJGJ2q5Gv0mMAw+kB/9i5yZKRvM6VQyL4NvYO4VqYjL5g440G0OLqGeQ6A==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@superset-ui/react-pivottable": "^0.12.11"
}
},
"@superset-ui/plugin-chart-table": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.17.79.tgz",
- "integrity": "sha512-gPXgLJntH72ligPD0V6XNT5Cj6eWzztL154/uhUf8qxXKSBB5wETrFqtIl00S99wJQeaPRN6UGER/eiuGqGOTA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.17.80.tgz",
+ "integrity": "sha512-0404twIq84jGiKbC/yfQwbYFh0RNBn8qMJnRO3oCtzvVmF3gelm8+mGKtUnxpd/OC6wiAXyorfoF3mlSW615oA==",
"requires": {
"@react-icons/all-files": "^4.1.0",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@types/d3-array": "^2.9.0",
"@types/react-table": "^7.0.29",
"d3-array": "^2.4.0",
@@ -61150,12 +61150,12 @@
}
},
"@superset-ui/plugin-chart-word-cloud": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-word-cloud/-/plugin-chart-word-cloud-0.17.79.tgz",
- "integrity": "sha512-EpHMJ1Qd7GnykEjlC+3bOzzBauLTFwZZuFFuCHs8m0exozuFaHQS1VxmpR1h3zJsp6pjF3PRFU05fpQ5LUAbnA==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-word-cloud/-/plugin-chart-word-cloud-0.17.80.tgz",
+ "integrity": "sha512-BBXJywPpF5q5y/+7S4PxJFajEufcURKgbTDbVE2uVj85v5m1XtdM5UpvjJ6O4AmksxKD3J1PfSBXtXehttf3hg==",
"requires": {
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@types/d3-cloud": "^1.2.1",
"@types/d3-scale": "^2.0.2",
"d3-cloud": "^1.2.5",
@@ -61186,14 +61186,14 @@
}
},
"@superset-ui/preset-chart-xy": {
- "version": "0.17.79",
- "resolved": "https://registry.npmjs.org/@superset-ui/preset-chart-xy/-/preset-chart-xy-0.17.79.tgz",
- "integrity": "sha512-JisKp00zIVa8VKSBXG1HNDj6hcRf70kHAGuSXHrQ8BUdfhy9Xc20oUMMFKeWSi0cc5NzPkgGg9Vl/vd3fvsO8Q==",
+ "version": "0.17.80",
+ "resolved": "https://registry.npmjs.org/@superset-ui/preset-chart-xy/-/preset-chart-xy-0.17.80.tgz",
+ "integrity": "sha512-AfxeBs9w0D7Af5NAKeJ1PmMfitjodpR2AELlsx1s9VkVXoz4Y3FgY9YkUCsphietzjF7Z1kSPYXPLY+wa57oMQ==",
"requires": {
"@data-ui/theme": "^0.0.84",
"@data-ui/xy-chart": "^0.0.84",
- "@superset-ui/chart-controls": "0.17.79",
- "@superset-ui/core": "0.17.75",
+ "@superset-ui/chart-controls": "0.17.80",
+ "@superset-ui/core": "0.17.80",
"@vx/axis": "^0.0.198",
"@vx/legend": "^0.0.198",
"@vx/scale": "^0.0.197",
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index b025107..8c85b91 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -67,35 +67,35 @@
"@emotion/babel-preset-css-prop": "^11.2.0",
"@emotion/cache": "^11.1.3",
"@emotion/react": "^11.1.5",
- "@superset-ui/chart-controls": "^0.17.79",
- "@superset-ui/core": "^0.17.75",
- "@superset-ui/legacy-plugin-chart-calendar": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-chord": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-country-map": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-event-flow": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-force-directed": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-heatmap": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-histogram": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-horizon": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-map-box": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-partition": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-rose": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-sankey": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-sunburst": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-treemap": "^0.17.79",
- "@superset-ui/legacy-plugin-chart-world-map": "^0.17.79",
- "@superset-ui/legacy-preset-chart-big-number": "^0.17.79",
+ "@superset-ui/chart-controls": "^0.17.80",
+ "@superset-ui/core": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-calendar": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-chord": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-country-map": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-event-flow": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-force-directed": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-heatmap": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-histogram": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-horizon": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-map-box": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-partition": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-rose": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-sankey": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-sunburst": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-treemap": "^0.17.80",
+ "@superset-ui/legacy-plugin-chart-world-map": "^0.17.80",
+ "@superset-ui/legacy-preset-chart-big-number": "^0.17.80",
"@superset-ui/legacy-preset-chart-deckgl": "^0.4.9",
- "@superset-ui/legacy-preset-chart-nvd3": "^0.17.79",
- "@superset-ui/plugin-chart-echarts": "^0.17.79",
- "@superset-ui/plugin-chart-pivot-table": "^0.17.79",
- "@superset-ui/plugin-chart-table": "^0.17.79",
- "@superset-ui/plugin-chart-word-cloud": "^0.17.79",
- "@superset-ui/preset-chart-xy": "^0.17.79",
+ "@superset-ui/legacy-preset-chart-nvd3": "^0.17.80",
+ "@superset-ui/plugin-chart-echarts": "^0.17.80",
+ "@superset-ui/plugin-chart-pivot-table": "^0.17.80",
+ "@superset-ui/plugin-chart-table": "^0.17.80",
+ "@superset-ui/plugin-chart-word-cloud": "^0.17.80",
+ "@superset-ui/preset-chart-xy": "^0.17.80",
"@vx/responsive": "^0.0.195",
"abortcontroller-polyfill": "^1.1.9",
"antd": "^4.9.4",
diff --git a/superset/charts/schemas.py b/superset/charts/schemas.py
index 726cf25..9968a07 100644
--- a/superset/charts/schemas.py
+++ b/superset/charts/schemas.py
@@ -293,6 +293,13 @@ class ChartDataAdhocMetricSchema(Schema):
"will be generated.",
example="metric_aec60732-fac0-4b17-b736-93f1a5c93e30",
)
+ timeGrain = fields.String(
+ description="Optional time grain for temporal filters", example="PT1M",
+ )
+ isExtra = fields.Boolean(
+ description="Indicates if the filter has been added by a filter component as "
+ "opposed to being a part of the original query."
+ )
class ChartDataAggregateConfigField(fields.Dict):
@@ -771,6 +778,13 @@ class ChartDataFilterSchema(Schema):
"integer, decimal or list, depending on the operator.",
example=["China", "France", "Japan"],
)
+ grain = fields.String(
+ description="Optional time grain for temporal filters", example="PT1M",
+ )
+ isExtra = fields.Boolean(
+ description="Indicates if the filter has been added by a filter component as "
+ "opposed to being a part of the original query."
+ )
class ChartDataExtrasSchema(Schema):
diff --git a/superset/common/query_object.py b/superset/common/query_object.py
index 8ab4c62..01ceaec 100644
--- a/superset/common/query_object.py
+++ b/superset/common/query_object.py
@@ -36,6 +36,7 @@ from superset.utils.core import (
get_metric_names,
is_adhoc_metric,
json_int_dttm_ser,
+ QueryObjectFilterClause,
)
from superset.utils.date_parser import get_since_until, parse_human_timedelta
from superset.utils.hashing import md5_sha_from_dict
@@ -85,7 +86,7 @@ class QueryObject:
metrics: Optional[List[Metric]]
row_limit: int
row_offset: int
- filter: List[Dict[str, Any]]
+ filter: List[QueryObjectFilterClause]
timeseries_limit: int
timeseries_limit_metric: Optional[Metric]
order_desc: bool
@@ -108,7 +109,7 @@ class QueryObject:
granularity: Optional[str] = None,
metrics: Optional[List[Metric]] = None,
groupby: Optional[List[str]] = None,
- filters: Optional[List[Dict[str, Any]]] = None,
+ filters: Optional[List[QueryObjectFilterClause]] = None,
time_range: Optional[str] = None,
time_shift: Optional[str] = None,
is_timeseries: Optional[bool] = None,
diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py
index 1a55607..cd93e46 100644
--- a/superset/connectors/sqla/models.py
+++ b/superset/connectors/sqla/models.py
@@ -86,7 +86,11 @@ from superset.models.helpers import AuditMixinNullable, QueryResult
from superset.sql_parse import ParsedQuery
from superset.typing import AdhocMetric, Metric, OrderBy, QueryObjectDict
from superset.utils import core as utils
-from superset.utils.core import GenericDataType, remove_duplicates
+from superset.utils.core import (
+ GenericDataType,
+ QueryObjectFilterClause,
+ remove_duplicates,
+)
config = app.config
metadata = Model.metadata # pylint: disable=no-member
@@ -303,13 +307,15 @@ class TableColumn(Model, BaseColumn):
pdf = self.python_date_format
is_epoch = pdf in ("epoch_s", "epoch_ms")
+ column_spec = self.db_engine_spec.get_column_spec(self.type)
+ type_ = column_spec.sqla_type if column_spec else DateTime
if not self.expression and not time_grain and not is_epoch:
- sqla_col = column(self.column_name, type_=DateTime)
+ sqla_col = column(self.column_name, type_=type_)
return self.table.make_sqla_column_compatible(sqla_col, label)
if self.expression:
- col = literal_column(self.expression)
+ col = literal_column(self.expression, type_=type_)
else:
- col = column(self.column_name)
+ col = column(self.column_name, type_=type_)
time_expr = self.db_engine_spec.get_timestamp_expr(
col, pdf, time_grain, self.type
)
@@ -935,7 +941,7 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
columns: Optional[List[str]] = None,
groupby: Optional[List[str]] = None,
filter: Optional[ # pylint: disable=redefined-builtin
- List[Dict[str, Any]]
+ List[QueryObjectFilterClause]
] = None,
is_timeseries: bool = True,
timeseries_limit: int = 15,
@@ -1056,6 +1062,8 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
# filter out the pseudo column __timestamp from columns
columns = columns or []
columns = [col for col in columns if col != utils.DTTM_ALIAS]
+ time_grain = extras.get("time_grain_sqla")
+ dttm_col = columns_by_name.get(granularity) if granularity else None
if need_groupby:
# dedup columns while preserving order
@@ -1063,7 +1071,6 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
for selected in columns:
# if groupby field/expr equals granularity field/expr
if selected == granularity:
- time_grain = extras.get("time_grain_sqla")
sqla_col = columns_by_name[selected]
outer = sqla_col.get_timestamp_expression(time_grain, selected)
# if groupby field equals a selected column
@@ -1087,15 +1094,13 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
groupby_exprs_with_timestamp = OrderedDict(groupby_exprs_sans_timestamp.items())
if granularity:
- if granularity not in columns_by_name:
+ if granularity not in columns_by_name or not dttm_col:
raise QueryObjectValidationError(
_(
'Time column "%(col)s" does not exist in dataset',
col=granularity,
)
)
- dttm_col = columns_by_name[granularity]
- time_grain = extras.get("time_grain_sqla")
time_filters = []
if is_timeseries:
@@ -1150,7 +1155,12 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
col = flt["col"]
val = flt.get("val")
op = flt["op"].upper()
- col_obj = columns_by_name.get(col)
+ col_obj = (
+ dttm_col
+ if col == utils.DTTM_ALIAS and is_timeseries and dttm_col
+ else columns_by_name.get(col)
+ )
+ filter_grain = flt.get("grain")
if is_feature_enabled("ENABLE_TEMPLATE_REMOVE_FILTERS"):
if col in removed_filters:
@@ -1158,6 +1168,10 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
continue
if col_obj:
+ if filter_grain:
+ sqla_col = col_obj.get_timestamp_expression(filter_grain)
+ else:
+ sqla_col = col_obj.get_sqla_col()
col_spec = db_engine_spec.get_column_spec(col_obj.type)
is_list_target = op in (
utils.FilterOperator.IN.value,
@@ -1180,24 +1194,24 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
)
if None in eq:
eq = [x for x in eq if x is not None]
- is_null_cond = col_obj.get_sqla_col().is_(None)
+ is_null_cond = sqla_col.is_(None)
if eq:
- cond = or_(is_null_cond, col_obj.get_sqla_col().in_(eq))
+ cond = or_(is_null_cond, sqla_col.in_(eq))
else:
cond = is_null_cond
else:
- cond = col_obj.get_sqla_col().in_(eq)
+ cond = sqla_col.in_(eq)
if op == utils.FilterOperator.NOT_IN.value:
cond = ~cond
where_clause_and.append(cond)
elif op == utils.FilterOperator.IS_NULL.value:
- where_clause_and.append(col_obj.get_sqla_col().is_(None))
+ where_clause_and.append(sqla_col.is_(None))
elif op == utils.FilterOperator.IS_NOT_NULL.value:
- where_clause_and.append(col_obj.get_sqla_col().isnot(None))
+ where_clause_and.append(sqla_col.isnot(None))
elif op == utils.FilterOperator.IS_TRUE.value:
- where_clause_and.append(col_obj.get_sqla_col().is_(True))
+ where_clause_and.append(sqla_col.is_(True))
elif op == utils.FilterOperator.IS_FALSE.value:
- where_clause_and.append(col_obj.get_sqla_col().is_(False))
+ where_clause_and.append(sqla_col.is_(False))
else:
if eq is None:
raise QueryObjectValidationError(
@@ -1207,21 +1221,21 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
)
)
if op == utils.FilterOperator.EQUALS.value:
- where_clause_and.append(col_obj.get_sqla_col() == eq)
+ where_clause_and.append(sqla_col == eq)
elif op == utils.FilterOperator.NOT_EQUALS.value:
- where_clause_and.append(col_obj.get_sqla_col() != eq)
+ where_clause_and.append(sqla_col != eq)
elif op == utils.FilterOperator.GREATER_THAN.value:
- where_clause_and.append(col_obj.get_sqla_col() > eq)
+ where_clause_and.append(sqla_col > eq)
elif op == utils.FilterOperator.LESS_THAN.value:
- where_clause_and.append(col_obj.get_sqla_col() < eq)
+ where_clause_and.append(sqla_col < eq)
elif op == utils.FilterOperator.GREATER_THAN_OR_EQUALS.value:
- where_clause_and.append(col_obj.get_sqla_col() >= eq)
+ where_clause_and.append(sqla_col >= eq)
elif op == utils.FilterOperator.LESS_THAN_OR_EQUALS.value:
- where_clause_and.append(col_obj.get_sqla_col() <= eq)
+ where_clause_and.append(sqla_col <= eq)
elif op == utils.FilterOperator.LIKE.value:
- where_clause_and.append(col_obj.get_sqla_col().like(eq))
+ where_clause_and.append(sqla_col.like(eq))
elif op == utils.FilterOperator.ILIKE.value:
- where_clause_and.append(col_obj.get_sqla_col().ilike(eq))
+ where_clause_and.append(sqla_col.ilike(eq))
else:
raise QueryObjectValidationError(
_("Invalid filter operation type: %(op)s", op=op)
@@ -1281,6 +1295,7 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
and timeseries_limit
and not time_groupby_inline
and groupby_exprs_sans_timestamp
+ and dttm_col
):
if db_engine_spec.allows_joins:
# some sql dialects require for order by expressions
diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py
index 1ce082c..261bede 100644
--- a/superset/db_engine_specs/base.py
+++ b/superset/db_engine_specs/base.py
@@ -44,7 +44,7 @@ from flask import current_app, g
from flask_babel import gettext as __, lazy_gettext as _
from marshmallow import fields, Schema
from marshmallow.validate import Range
-from sqlalchemy import column, DateTime, select, types
+from sqlalchemy import column, select, types
from sqlalchemy.engine.base import Engine
from sqlalchemy.engine.interfaces import Compiled, Dialect
from sqlalchemy.engine.reflection import Inspector
@@ -381,7 +381,7 @@ class BaseEngineSpec: # pylint: disable=too-many-public-methods
elif pdf == "epoch_ms":
time_expr = time_expr.replace("{col}", cls.epoch_ms_to_dttm())
- return TimestampExpression(time_expr, col, type_=DateTime)
+ return TimestampExpression(time_expr, col, type_=col.type)
@classmethod
def get_time_grains(cls) -> Tuple[TimeGrain, ...]:
diff --git a/superset/typing.py b/superset/typing.py
index ed8ed0e..009c9d9 100644
--- a/superset/typing.py
+++ b/superset/typing.py
@@ -42,7 +42,7 @@ DbapiDescriptionRow = Tuple[
]
DbapiDescription = Union[List[DbapiDescriptionRow], Tuple[DbapiDescriptionRow, ...]]
DbapiResult = Sequence[Union[List[Any], Tuple[Any, ...]]]
-FilterValue = Union[datetime, float, int, str]
+FilterValue = Union[bool, datetime, float, int, str]
FilterValues = Union[FilterValue, List[FilterValue], Tuple[FilterValue]]
FormData = Dict[str, Any]
Granularity = Union[str, Dict[str, Union[str, float]]]
diff --git a/superset/utils/core.py b/superset/utils/core.py
index 803bafc..427ebfa 100644
--- a/superset/utils/core.py
+++ b/superset/utils/core.py
@@ -96,7 +96,7 @@ from superset.exceptions import (
SupersetException,
SupersetTimeoutException,
)
-from superset.typing import AdhocMetric, FlaskResponse, FormData, Metric
+from superset.typing import AdhocMetric, FilterValues, FlaskResponse, FormData, Metric
from superset.utils.dates import datetime_to_epoch, EPOCH
from superset.utils.hashing import md5_sha_from_dict, md5_sha_from_str
@@ -189,6 +189,25 @@ class DatasourceDict(TypedDict):
id: int
+class AdhocFilterClause(TypedDict, total=False):
+ clause: str
+ expressionType: str
+ filterOptionName: Optional[str]
+ comparator: Optional[FilterValues]
+ operator: str
+ subject: str
+ isExtra: Optional[bool]
+ sqlExpression: Optional[str]
+
+
+class QueryObjectFilterClause(TypedDict, total=False):
+ col: str
+ op: str # pylint: disable=invalid-name
+ val: Optional[FilterValues]
+ grain: Optional[str]
+ isExtra: Optional[bool]
+
+
class ExtraFiltersTimeColumnType(str, Enum):
GRANULARITY = "__granularity"
TIME_COL = "__time_col"
@@ -1017,28 +1036,32 @@ def zlib_decompress(blob: bytes, decode: Optional[bool] = True) -> Union[bytes,
return decompressed.decode("utf-8") if decode else decompressed
-def to_adhoc(
- filt: Dict[str, Any], expression_type: str = "SIMPLE", clause: str = "where"
-) -> Dict[str, Any]:
- result = {
+def simple_filter_to_adhoc(
+ filter_clause: QueryObjectFilterClause, clause: str = "where",
+) -> AdhocFilterClause:
+ result: AdhocFilterClause = {
"clause": clause.upper(),
- "expressionType": expression_type,
- "isExtra": bool(filt.get("isExtra")),
+ "expressionType": "SIMPLE",
+ "comparator": filter_clause.get("val"),
+ "operator": filter_clause["op"],
+ "subject": filter_clause["col"],
}
+ if filter_clause.get("isExtra"):
+ result["isExtra"] = True
+ result["filterOptionName"] = md5_sha_from_dict(cast(Dict[Any, Any], result))
- if expression_type == "SIMPLE":
- result.update(
- {
- "comparator": filt.get("val"),
- "operator": filt.get("op"),
- "subject": filt.get("col"),
- }
- )
- elif expression_type == "SQL":
- result.update({"sqlExpression": filt.get(clause)})
+ return result
- deterministic_name = md5_sha_from_dict(result)
- result["filterOptionName"] = deterministic_name
+
+def form_data_to_adhoc(form_data: Dict[str, Any], clause: str) -> AdhocFilterClause:
+ if clause not in ("where", "having"):
+ raise ValueError(__("Unsupported clause type: %(clause)s", clause=clause))
+ result: AdhocFilterClause = {
+ "clause": clause.upper(),
+ "expressionType": "SQL",
+ "sqlExpression": form_data.get(clause),
+ }
+ result["filterOptionName"] = md5_sha_from_dict(cast(Dict[Any, Any], result))
return result
@@ -1050,7 +1073,7 @@ def merge_extra_form_data(form_data: Dict[str, Any]) -> None:
"""
filter_keys = ["filters", "adhoc_filters"]
extra_form_data = form_data.pop("extra_form_data", {})
- append_filters = extra_form_data.get("filters", None)
+ append_filters: List[QueryObjectFilterClause] = extra_form_data.get("filters", None)
# merge append extras
for key in [key for key in EXTRA_FORM_DATA_APPEND_KEYS if key not in filter_keys]:
@@ -1075,13 +1098,21 @@ def merge_extra_form_data(form_data: Dict[str, Any]) -> None:
if extras:
form_data["extras"] = extras
- adhoc_filters = form_data.get("adhoc_filters", [])
+ adhoc_filters: List[AdhocFilterClause] = form_data.get("adhoc_filters", [])
form_data["adhoc_filters"] = adhoc_filters
- append_adhoc_filters = extra_form_data.get("adhoc_filters", [])
- adhoc_filters.extend({"isExtra": True, **fltr} for fltr in append_adhoc_filters)
+ append_adhoc_filters: List[AdhocFilterClause] = extra_form_data.get(
+ "adhoc_filters", []
+ )
+ adhoc_filters.extend(
+ {"isExtra": True, **fltr} for fltr in append_adhoc_filters # type: ignore
+ )
if append_filters:
adhoc_filters.extend(
- to_adhoc({"isExtra": True, **fltr}) for fltr in append_filters if fltr
+ simple_filter_to_adhoc(
+ {"isExtra": True, **fltr} # type: ignore
+ )
+ for fltr in append_filters
+ if fltr
)
@@ -1148,16 +1179,16 @@ def merge_extra_filters( # pylint: disable=too-many-branches
# Add filters for unequal lists
# order doesn't matter
if set(existing_filters[filter_key]) != set(filtr["val"]):
- adhoc_filters.append(to_adhoc(filtr))
+ adhoc_filters.append(simple_filter_to_adhoc(filtr))
else:
- adhoc_filters.append(to_adhoc(filtr))
+ adhoc_filters.append(simple_filter_to_adhoc(filtr))
else:
# Do not add filter if same value already exists
if filtr["val"] != existing_filters[filter_key]:
- adhoc_filters.append(to_adhoc(filtr))
+ adhoc_filters.append(simple_filter_to_adhoc(filtr))
else:
# Filter not found, add it
- adhoc_filters.append(to_adhoc(filtr))
+ adhoc_filters.append(simple_filter_to_adhoc(filtr))
# Remove extra filters from the form data since no longer needed
del form_data["extra_filters"]
@@ -1268,15 +1299,16 @@ def convert_legacy_filters_into_adhoc( # pylint: disable=invalid-name
mapping = {"having": "having_filters", "where": "filters"}
if not form_data.get("adhoc_filters"):
- form_data["adhoc_filters"] = []
+ adhoc_filters: List[AdhocFilterClause] = []
+ form_data["adhoc_filters"] = adhoc_filters
for clause, filters in mapping.items():
if clause in form_data and form_data[clause] != "":
- form_data["adhoc_filters"].append(to_adhoc(form_data, "SQL", clause))
+ adhoc_filters.append(form_data_to_adhoc(form_data, clause))
if filters in form_data:
for filt in filter(lambda x: x is not None, form_data[filters]):
- form_data["adhoc_filters"].append(to_adhoc(filt, "SIMPLE", clause))
+ adhoc_filters.append(simple_filter_to_adhoc(filt, clause))
for key in ("filters", "having", "having_filters", "where"):
if key in form_data:
diff --git a/superset/viz.py b/superset/viz.py
index 3dc799e..cd19807 100644
--- a/superset/viz.py
+++ b/superset/viz.py
@@ -74,7 +74,7 @@ from superset.utils.core import (
JS_MAX_INTEGER,
merge_extra_filters,
QueryMode,
- to_adhoc,
+ simple_filter_to_adhoc,
)
from superset.utils.date_parser import get_since_until, parse_past_timedelta
from superset.utils.dates import datetime_to_epoch
@@ -2475,7 +2475,9 @@ class BaseDeckGLViz(BaseViz):
spatial_columns.add(line_column)
for column in sorted(spatial_columns):
- filter_ = to_adhoc({"col": column, "op": "IS NOT NULL", "val": ""})
+ filter_ = simple_filter_to_adhoc(
+ {"col": column, "op": "IS NOT NULL", "val": ""}
+ )
fd["adhoc_filters"].append(filter_)
def query_obj(self) -> QueryObjectDict:
diff --git a/tests/integration_tests/model_tests.py b/tests/integration_tests/model_tests.py
index ee9b3cd..deb7846 100644
--- a/tests/integration_tests/model_tests.py
+++ b/tests/integration_tests/model_tests.py
@@ -22,7 +22,6 @@ from tests.integration_tests.fixtures.birth_names_dashboard import (
load_birth_names_dashboard_with_slices,
)
-import pandas
import pytest
from sqlalchemy.engine.url import make_url
@@ -339,12 +338,19 @@ class TestDatabaseModel(SupersetTestCase):
class TestSqlaTableModel(SupersetTestCase):
@pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
def test_get_timestamp_expression(self):
+ col_type = (
+ "VARCHAR"
+ if get_example_database().backend == "presto"
+ else "TemporalWrapperType"
+ )
tbl = self.get_table(name="birth_names")
ds_col = tbl.get_column("ds")
sqla_literal = ds_col.get_timestamp_expression(None)
self.assertEqual(str(sqla_literal.compile()), "ds")
+ assert type(sqla_literal.type).__name__ == col_type
sqla_literal = ds_col.get_timestamp_expression("P1D")
+ assert type(sqla_literal.type).__name__ == col_type
compiled = "{}".format(sqla_literal.compile())
if tbl.database.backend == "mysql":
self.assertEqual(compiled, "DATE(ds)")
@@ -352,6 +358,7 @@ class TestSqlaTableModel(SupersetTestCase):
prev_ds_expr = ds_col.expression
ds_col.expression = "DATE_ADD(ds, 1)"
sqla_literal = ds_col.get_timestamp_expression("P1D")
+ assert type(sqla_literal.type).__name__ == col_type
compiled = "{}".format(sqla_literal.compile())
if tbl.database.backend == "mysql":
self.assertEqual(compiled, "DATE(DATE_ADD(ds, 1))")
diff --git a/tests/integration_tests/utils/core_tests.py b/tests/integration_tests/utils/core_tests.py
index 8699dd7..3ba3903 100644
--- a/tests/integration_tests/utils/core_tests.py
+++ b/tests/integration_tests/utils/core_tests.py
@@ -17,10 +17,10 @@
# pylint: disable=no-self-use
import pytest
-from superset.utils.core import to_adhoc
+from superset.utils.core import form_data_to_adhoc, simple_filter_to_adhoc
-def test_to_adhoc_generates_deterministic_values():
+def test_simple_filter_to_adhoc_generates_deterministic_values():
input_1 = {
"op": "IS NOT NULL",
"col": "LATITUDE",
@@ -30,25 +30,56 @@ def test_to_adhoc_generates_deterministic_values():
input_2 = {**input_1, "col": "LONGITUDE"}
# The result is the same when given the same input
- assert to_adhoc(input_1) == to_adhoc(input_1)
- assert to_adhoc(input_1) == {
+ assert simple_filter_to_adhoc(input_1) == simple_filter_to_adhoc(input_1)
+ assert simple_filter_to_adhoc(input_1) == {
"clause": "WHERE",
"expressionType": "SIMPLE",
- "isExtra": False,
"comparator": "",
"operator": "IS NOT NULL",
"subject": "LATITUDE",
- "filterOptionName": "d0908f77d950131db7a69fdc820cb739",
+ "filterOptionName": "6ac89d498115da22396f80a765cffc70",
}
# The result is different when given different input
- assert to_adhoc(input_1) != to_adhoc(input_2)
- assert to_adhoc(input_2) == {
+ assert simple_filter_to_adhoc(input_1) != simple_filter_to_adhoc(input_2)
+ assert simple_filter_to_adhoc(input_2) == {
"clause": "WHERE",
"expressionType": "SIMPLE",
- "isExtra": False,
"comparator": "",
"operator": "IS NOT NULL",
"subject": "LONGITUDE",
- "filterOptionName": "c5f283f727d4dfc6258b351d4a8663bc",
+ "filterOptionName": "9c984bd3714883ca859948354ce26ab9",
}
+
+
+def test_form_data_to_adhoc_generates_deterministic_values():
+ form_data = {"where": "1 = 1", "having": "count(*) > 1"}
+
+ # The result is the same when given the same input
+ assert form_data_to_adhoc(form_data, "where") == form_data_to_adhoc(
+ form_data, "where"
+ )
+ assert form_data_to_adhoc(form_data, "where") == {
+ "clause": "WHERE",
+ "expressionType": "SQL",
+ "sqlExpression": "1 = 1",
+ "filterOptionName": "99fe79985afbddea4492626dc6a87b74",
+ }
+
+ # The result is different when given different input
+ assert form_data_to_adhoc(form_data, "having") == form_data_to_adhoc(
+ form_data, "having"
+ )
+ assert form_data_to_adhoc(form_data, "having") == {
+ "clause": "HAVING",
+ "expressionType": "SQL",
+ "sqlExpression": "count(*) > 1",
+ "filterOptionName": "1da11f6b709c3190daeabb84f77fc8c2",
+ }
+
+
+def test_form_data_to_adhoc_incorrect_clause_type():
+ form_data = {"where": "1 = 1", "having": "count(*) > 1"}
+
+ with pytest.raises(ValueError):
+ form_data_to_adhoc(form_data, "foobar")
diff --git a/tests/integration_tests/utils_tests.py b/tests/integration_tests/utils_tests.py
index 2d66832..07a4445 100644
--- a/tests/integration_tests/utils_tests.py
+++ b/tests/integration_tests/utils_tests.py
@@ -85,19 +85,6 @@ from tests.integration_tests.fixtures.world_bank_dashboard import (
from .fixtures.certificates import ssl_certificate
-def mock_to_adhoc(filt, expressionType="SIMPLE", clause="where"):
- result = {"clause": clause.upper(), "expressionType": expressionType}
-
- if expressionType == "SIMPLE":
- result.update(
- {"comparator": filt["val"], "operator": filt["op"], "subject": filt["col"]}
- )
- elif expressionType == "SQL":
- result.update({"sqlExpression": filt[clause]})
-
- return result
-
-
class TestUtils(SupersetTestCase):
def test_json_int_dttm_ser(self):
dttm = datetime(2020, 1, 1)
@@ -137,7 +124,6 @@ class TestUtils(SupersetTestCase):
got_str = zlib_decompress(blob)
self.assertEqual(json_str, got_str)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_merge_extra_filters(self):
# does nothing if no extra filters
form_data = {"A": 1, "B": 2, "c": "test"}
@@ -168,6 +154,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": "someval",
"expressionType": "SIMPLE",
+ "filterOptionName": "90cfb3c34852eb3bc741b0cc20053b46",
+ "isExtra": True,
"operator": "in",
"subject": "a",
},
@@ -175,6 +163,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": ["c1", "c2"],
"expressionType": "SIMPLE",
+ "filterOptionName": "6c178d069965f1c02640661280415d96",
+ "isExtra": True,
"operator": "==",
"subject": "B",
},
@@ -212,6 +202,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": "someval",
"expressionType": "SIMPLE",
+ "filterOptionName": "90cfb3c34852eb3bc741b0cc20053b46",
+ "isExtra": True,
"operator": "in",
"subject": "a",
},
@@ -219,6 +211,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": ["c1", "c2"],
"expressionType": "SIMPLE",
+ "filterOptionName": "6c178d069965f1c02640661280415d96",
+ "isExtra": True,
"operator": "==",
"subject": "B",
},
@@ -244,6 +238,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": "hello",
"expressionType": "SIMPLE",
+ "filterOptionName": "e3cbdd92a2ae23ca92c6d7fca42e36a6",
+ "isExtra": True,
"operator": "like",
"subject": "A",
}
@@ -264,7 +260,6 @@ class TestUtils(SupersetTestCase):
merge_extra_filters(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_merge_extra_filters_ignores_empty_filters(self):
form_data = {
"extra_filters": [
@@ -276,7 +271,6 @@ class TestUtils(SupersetTestCase):
merge_extra_filters(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_merge_extra_filters_ignores_nones(self):
form_data = {
"adhoc_filters": [
@@ -305,7 +299,6 @@ class TestUtils(SupersetTestCase):
merge_extra_filters(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_merge_extra_filters_ignores_equal_filters(self):
form_data = {
"extra_filters": [
@@ -366,7 +359,6 @@ class TestUtils(SupersetTestCase):
merge_extra_filters(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_merge_extra_filters_merges_different_val_types(self):
form_data = {
"extra_filters": [
@@ -410,6 +402,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": ["g1", "g2"],
"expressionType": "SIMPLE",
+ "filterOptionName": "c11969c994b40a83a4ae7d48ff1ea28e",
+ "isExtra": True,
"operator": "in",
"subject": "a",
},
@@ -460,6 +454,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": "someval",
"expressionType": "SIMPLE",
+ "filterOptionName": "90cfb3c34852eb3bc741b0cc20053b46",
+ "isExtra": True,
"operator": "in",
"subject": "a",
},
@@ -469,7 +465,6 @@ class TestUtils(SupersetTestCase):
merge_extra_filters(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_merge_extra_filters_adds_unequal_lists(self):
form_data = {
"extra_filters": [
@@ -513,6 +508,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": ["g1", "g2", "g3"],
"expressionType": "SIMPLE",
+ "filterOptionName": "21cbb68af7b17e62b3b2f75e2190bfd7",
+ "isExtra": True,
"operator": "in",
"subject": "a",
},
@@ -520,6 +517,8 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": ["c1", "c2", "c3"],
"expressionType": "SIMPLE",
+ "filterOptionName": "0a8dcb928f1f4bba97643c6e68d672f1",
+ "isExtra": True,
"operator": "==",
"subject": "B",
},
@@ -580,18 +579,21 @@ class TestUtils(SupersetTestCase):
with self.assertRaises(SupersetException):
validate_json(invalid)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_convert_legacy_filters_into_adhoc_where(self):
form_data = {"where": "a = 1"}
expected = {
"adhoc_filters": [
- {"clause": "WHERE", "expressionType": "SQL", "sqlExpression": "a = 1"}
+ {
+ "clause": "WHERE",
+ "expressionType": "SQL",
+ "filterOptionName": "46fb6d7891e23596e42ae38da94a57e0",
+ "sqlExpression": "a = 1",
+ }
]
}
convert_legacy_filters_into_adhoc(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_convert_legacy_filters_into_adhoc_filters(self):
form_data = {"filters": [{"col": "a", "op": "in", "val": "someval"}]}
expected = {
@@ -600,6 +602,7 @@ class TestUtils(SupersetTestCase):
"clause": "WHERE",
"comparator": "someval",
"expressionType": "SIMPLE",
+ "filterOptionName": "135c7ee246666b840a3d7a9c3a30cf38",
"operator": "in",
"subject": "a",
}
@@ -608,7 +611,6 @@ class TestUtils(SupersetTestCase):
convert_legacy_filters_into_adhoc(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_convert_legacy_filters_into_adhoc_having(self):
form_data = {"having": "COUNT(1) = 1"}
expected = {
@@ -616,6 +618,7 @@ class TestUtils(SupersetTestCase):
{
"clause": "HAVING",
"expressionType": "SQL",
+ "filterOptionName": "683f1c26466ab912f75a00842e0f2f7b",
"sqlExpression": "COUNT(1) = 1",
}
]
@@ -623,7 +626,6 @@ class TestUtils(SupersetTestCase):
convert_legacy_filters_into_adhoc(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_convert_legacy_filters_into_adhoc_having_filters(self):
form_data = {"having_filters": [{"col": "COUNT(1)", "op": "==", "val": 1}]}
expected = {
@@ -632,6 +634,7 @@ class TestUtils(SupersetTestCase):
"clause": "HAVING",
"comparator": 1,
"expressionType": "SIMPLE",
+ "filterOptionName": "967d0fb409f6d9c7a6c03a46cf933c9c",
"operator": "==",
"subject": "COUNT(1)",
}
@@ -640,18 +643,21 @@ class TestUtils(SupersetTestCase):
convert_legacy_filters_into_adhoc(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_convert_legacy_filters_into_adhoc_present_and_empty(self):
form_data = {"adhoc_filters": [], "where": "a = 1"}
expected = {
"adhoc_filters": [
- {"clause": "WHERE", "expressionType": "SQL", "sqlExpression": "a = 1"}
+ {
+ "clause": "WHERE",
+ "expressionType": "SQL",
+ "filterOptionName": "46fb6d7891e23596e42ae38da94a57e0",
+ "sqlExpression": "a = 1",
+ }
]
}
convert_legacy_filters_into_adhoc(form_data)
self.assertEqual(form_data, expected)
- @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
def test_convert_legacy_filters_into_adhoc_present_and_nonempty(self):
form_data = {
"adhoc_filters": [
diff --git a/tests/integration_tests/viz_tests.py b/tests/integration_tests/viz_tests.py
index c3370ab..aa40367 100644
--- a/tests/integration_tests/viz_tests.py
+++ b/tests/integration_tests/viz_tests.py
@@ -1196,42 +1196,38 @@ class TestBaseDeckGLViz(SupersetTestCase):
{
"clause": "WHERE",
"expressionType": "SIMPLE",
- "filterOptionName": "bfa3a42a6f3de3c781b7d4f8e8d6613d",
+ "filterOptionName": "c7f171cf3204bcbf456acfeac5cd9afd",
"comparator": "",
"operator": "IS NOT NULL",
"subject": "lat",
- "isExtra": False,
},
{
"clause": "WHERE",
"expressionType": "SIMPLE",
- "filterOptionName": "2d35d87b57c6f1a5ae139f1a6b0cbd0a",
+ "filterOptionName": "52634073fbb8ae0a3aa59ad48abac55e",
"comparator": "",
"operator": "IS NOT NULL",
"subject": "lon",
- "isExtra": False,
},
],
"delimited_key": [
{
"clause": "WHERE",
"expressionType": "SIMPLE",
- "filterOptionName": "89cc0fafe39a4eabc5df2cd52e4d6514",
+ "filterOptionName": "cae5c925c140593743da08499e6fb207",
"comparator": "",
"operator": "IS NOT NULL",
"subject": "lonlat",
- "isExtra": False,
}
],
"geohash_key": [
{
"clause": "WHERE",
"expressionType": "SIMPLE",
- "filterOptionName": "fa734d9a7bab254a53b41540d46cdb6c",
+ "filterOptionName": "d84f55222d8e414e888fa5f990b341d2",
"comparator": "",
"operator": "IS NOT NULL",
"subject": "geo",
- "isExtra": False,
}
],
}