You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2024/02/13 15:17:18 UTC
(superset) branch 3.0 updated (d2d98be619 -> 48c358b445)
This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a change to branch 3.0
in repository https://gitbox.apache.org/repos/asf/superset.git
from d2d98be619 build(deps): bump csstype from 2.6.9 to 3.1.3 in /superset-frontend (#26716)
new 6731d15c13 fix: bump FAB to 4.3.11 (#27039)
new b368ea3abd fix: Drill by with GLOBAL_ASYNC_QUERIES (#27066)
new 48c358b445 fix(big_number): white-space: nowrap to prevent wrapping (#27096)
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
requirements/base.txt | 11 +++--
requirements/development.txt | 4 +-
requirements/integration.txt | 6 +++
setup.py | 2 +-
.../src/BigNumber/BigNumberViz.tsx | 1 +
.../src/components/Chart/DrillBy/DrillByModal.tsx | 11 +++--
.../src/components/Chart/chartAction.js | 52 +++++++++++-----------
.../src/components/Chart/chartActions.test.js | 43 +++++++++++++++++-
8 files changed, 96 insertions(+), 34 deletions(-)
(superset) 02/03: fix: Drill by with GLOBAL_ASYNC_QUERIES (#27066)
Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/superset.git
commit b368ea3abd2a77e1a51661eb69d21ccbbf6bce1f
Author: Kamil Gabryjelski <ka...@gmail.com>
AuthorDate: Fri Feb 9 21:49:33 2024 +0100
fix: Drill by with GLOBAL_ASYNC_QUERIES (#27066)
---
.../src/components/Chart/DrillBy/DrillByModal.tsx | 11 +++--
.../src/components/Chart/chartAction.js | 52 +++++++++++-----------
.../src/components/Chart/chartActions.test.js | 43 +++++++++++++++++-
3 files changed, 77 insertions(+), 29 deletions(-)
diff --git a/superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx b/superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx
index d1e8b39e0c..5053a76711 100644
--- a/superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx
+++ b/superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx
@@ -54,11 +54,12 @@ import {
LOG_ACTIONS_DRILL_BY_MODAL_OPENED,
LOG_ACTIONS_FURTHER_DRILL_BY,
} from 'src/logger/LogUtils';
+import { getQuerySettings } from 'src/explore/exploreUtils';
import { Dataset, DrillByType } from '../types';
import DrillByChart from './DrillByChart';
import { ContextMenuItem } from '../ChartContextMenu/ChartContextMenu';
import { useContextMenu } from '../ChartContextMenu/useContextMenu';
-import { getChartDataRequest } from '../chartAction';
+import { getChartDataRequest, handleChartDataResponse } from '../chartAction';
import { useDisplayModeToggle } from './useDisplayModeToggle';
import {
DrillByBreadcrumb,
@@ -390,13 +391,17 @@ export default function DrillByModal({
useEffect(() => {
if (drilledFormData) {
+ const [useLegacyApi] = getQuerySettings(drilledFormData);
setIsChartDataLoading(true);
setChartDataResult(undefined);
getChartDataRequest({
formData: drilledFormData,
})
- .then(({ json }) => {
- setChartDataResult(json.result);
+ .then(({ response, json }) =>
+ handleChartDataResponse(response, json, useLegacyApi),
+ )
+ .then(queriesResponse => {
+ setChartDataResult(queriesResponse);
})
.catch(() => {
addDangerToast(t('Failed to load chart data.'));
diff --git a/superset-frontend/src/components/Chart/chartAction.js b/superset-frontend/src/components/Chart/chartAction.js
index 5dd4a4e04d..0369b4c22a 100644
--- a/superset-frontend/src/components/Chart/chartAction.js
+++ b/superset-frontend/src/components/Chart/chartAction.js
@@ -376,6 +376,29 @@ export function addChart(chart, key) {
return { type: ADD_CHART, chart, key };
}
+export function handleChartDataResponse(response, json, useLegacyApi) {
+ if (isFeatureEnabled(FeatureFlag.GlobalAsyncQueries)) {
+ // deal with getChartDataRequest transforming the response data
+ const result = 'result' in json ? json.result : json;
+ switch (response.status) {
+ case 200:
+ // Query results returned synchronously, meaning query was already cached.
+ return Promise.resolve(result);
+ case 202:
+ // Query is running asynchronously and we must await the results
+ if (useLegacyApi) {
+ return waitForAsyncData(result[0]);
+ }
+ return waitForAsyncData(result);
+ default:
+ throw new Error(
+ `Received unexpected response status (${response.status}) while fetching chart data`,
+ );
+ }
+ }
+ return json.result;
+}
+
export function exploreJSON(
formData,
force = false,
@@ -411,31 +434,11 @@ export function exploreJSON(
dispatch(chartUpdateStarted(controller, formData, key));
+ const [useLegacyApi] = getQuerySettings(formData);
const chartDataRequestCaught = chartDataRequest
- .then(({ response, json }) => {
- if (isFeatureEnabled(FeatureFlag.GLOBAL_ASYNC_QUERIES)) {
- // deal with getChartDataRequest transforming the response data
- const result = 'result' in json ? json.result : json;
- const [useLegacyApi] = getQuerySettings(formData);
- switch (response.status) {
- case 200:
- // Query results returned synchronously, meaning query was already cached.
- return Promise.resolve(result);
- case 202:
- // Query is running asynchronously and we must await the results
- if (useLegacyApi) {
- return waitForAsyncData(result[0]);
- }
- return waitForAsyncData(result);
- default:
- throw new Error(
- `Received unexpected response status (${response.status}) while fetching chart data`,
- );
- }
- }
-
- return json.result;
- })
+ .then(({ response, json }) =>
+ handleChartDataResponse(response, json, useLegacyApi),
+ )
.then(queriesResponse => {
queriesResponse.forEach(resultItem =>
dispatch(
@@ -494,7 +497,6 @@ export function exploreJSON(
});
// only retrieve annotations when calling the legacy API
- const [useLegacyApi] = getQuerySettings(formData);
const annotationLayers = useLegacyApi
? formData.annotation_layers || []
: [];
diff --git a/superset-frontend/src/components/Chart/chartActions.test.js b/superset-frontend/src/components/Chart/chartActions.test.js
index b3a6fed9f5..c2a58e6094 100644
--- a/superset-frontend/src/components/Chart/chartActions.test.js
+++ b/superset-frontend/src/components/Chart/chartActions.test.js
@@ -21,10 +21,12 @@ import fetchMock from 'fetch-mock';
import sinon from 'sinon';
import * as chartlib from '@superset-ui/core';
-import { SupersetClient } from '@superset-ui/core';
+import { FeatureFlag, SupersetClient } from '@superset-ui/core';
import { LOG_EVENT } from 'src/logger/actions';
import * as exploreUtils from 'src/explore/exploreUtils';
import * as actions from 'src/components/Chart/chartAction';
+import * as asyncEvent from 'src/middleware/asyncEvent';
+import { handleChartDataResponse } from 'src/components/Chart/chartAction';
describe('chart actions', () => {
const MOCK_URL = '/mockURL';
@@ -33,6 +35,7 @@ describe('chart actions', () => {
let getChartDataUriStub;
let metadataRegistryStub;
let buildQueryRegistryStub;
+ let waitForAsyncDataStub;
let fakeMetadata;
const setupDefaultFetchMock = () => {
@@ -66,6 +69,9 @@ describe('chart actions', () => {
result_format: 'json',
}),
}));
+ waitForAsyncDataStub = sinon
+ .stub(asyncEvent, 'waitForAsyncData')
+ .callsFake(data => Promise.resolve(data));
});
afterEach(() => {
@@ -74,6 +80,11 @@ describe('chart actions', () => {
fetchMock.resetHistory();
metadataRegistryStub.restore();
buildQueryRegistryStub.restore();
+ waitForAsyncDataStub.restore();
+
+ global.featureFlags = {
+ [FeatureFlag.GlobalAsyncQueries]: false,
+ };
});
describe('v1 API', () => {
@@ -114,6 +125,36 @@ describe('chart actions', () => {
expect(fetchMock.calls(mockBigIntUrl)).toHaveLength(1);
expect(json.value.toString()).toEqual(expectedBigNumber);
});
+
+ it('handleChartDataResponse should return result if GlobalAsyncQueries flag is disabled', async () => {
+ const result = await handleChartDataResponse(
+ { status: 200 },
+ { result: [1, 2, 3] },
+ );
+ expect(result).toEqual([1, 2, 3]);
+ });
+
+ it('handleChartDataResponse should handle responses when GlobalAsyncQueries flag is enabled and results are returned synchronously', async () => {
+ global.featureFlags = {
+ [FeatureFlag.GlobalAsyncQueries]: true,
+ };
+ const result = await handleChartDataResponse(
+ { status: 200 },
+ { result: [1, 2, 3] },
+ );
+ expect(result).toEqual([1, 2, 3]);
+ });
+
+ it('handleChartDataResponse should handle responses when GlobalAsyncQueries flag is enabled and query is running asynchronously', async () => {
+ global.featureFlags = {
+ [FeatureFlag.GlobalAsyncQueries]: true,
+ };
+ const result = await handleChartDataResponse(
+ { status: 202 },
+ { result: [1, 2, 3] },
+ );
+ expect(result).toEqual([1, 2, 3]);
+ });
});
describe('legacy API', () => {
(superset) 03/03: fix(big_number): white-space: nowrap to prevent wrapping (#27096)
Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 48c358b445e4ba130a2275d6ada0005e8158b29e
Author: Maxime Beauchemin <ma...@gmail.com>
AuthorDate: Mon Feb 12 19:09:13 2024 -0800
fix(big_number): white-space: nowrap to prevent wrapping (#27096)
(cherry picked from commit 4796484190010275c037595c79b01d281d09ff60)
---
.../plugins/plugin-chart-echarts/src/BigNumber/BigNumberViz.tsx | 1 +
1 file changed, 1 insertion(+)
diff --git a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberViz.tsx b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberViz.tsx
index 112e21657f..8a95a81d5f 100644
--- a/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberViz.tsx
+++ b/superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberViz.tsx
@@ -354,6 +354,7 @@ export default styled(BigNumberVis)`
.header-line {
position: relative;
line-height: 1em;
+ white-space: nowrap;
span {
position: absolute;
bottom: 0;
(superset) 01/03: fix: bump FAB to 4.3.11 (#27039)
Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 6731d15c13e7dd8527abc2b3a943558910f42288
Author: Daniel Vaz Gaspar <da...@gmail.com>
AuthorDate: Wed Feb 7 15:58:19 2024 +0000
fix: bump FAB to 4.3.11 (#27039)
---
requirements/base.txt | 11 ++++++++---
requirements/development.txt | 4 +++-
requirements/integration.txt | 6 ++++++
setup.py | 2 +-
4 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/requirements/base.txt b/requirements/base.txt
index a34df1905d..7f04abf245 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -88,7 +88,7 @@ flask==2.2.5
# flask-session
# flask-sqlalchemy
# flask-wtf
-flask-appbuilder==4.3.10
+flask-appbuilder==4.3.11
# via apache-superset
flask-babel==1.0.0
# via flask-appbuilder
@@ -135,7 +135,9 @@ humanize==3.11.0
idna==3.2
# via email-validator
importlib-metadata==6.6.0
- # via apache-superset
+ # via
+ # apache-superset
+ # flask
importlib-resources==5.12.0
# via limits
isodate==0.6.0
@@ -295,6 +297,7 @@ typing-extensions==4.4.0
# via
# apache-superset
# flask-limiter
+ # kombu
# limits
urllib3==1.26.6
# via selenium
@@ -325,7 +328,9 @@ wtforms-json==0.3.5
xlsxwriter==3.0.7
# via apache-superset
zipp==3.15.0
- # via importlib-metadata
+ # via
+ # importlib-metadata
+ # importlib-resources
# The following packages are considered to be unsafe in a requirements file:
# setuptools
diff --git a/requirements/development.txt b/requirements/development.txt
index 2083e8dd9e..3961a2cdf8 100644
--- a/requirements/development.txt
+++ b/requirements/development.txt
@@ -85,7 +85,9 @@ ptyprocess==0.7.0
pure-eval==0.2.2
# via stack-data
pure-sasl==0.6.2
- # via thrift-sasl
+ # via
+ # pyhive
+ # thrift-sasl
pyasn1==0.5.0
# via
# pyasn1-modules
diff --git a/requirements/integration.txt b/requirements/integration.txt
index 62541073c5..14aa27bb21 100644
--- a/requirements/integration.txt
+++ b/requirements/integration.txt
@@ -52,6 +52,12 @@ pyproject-hooks==1.0.0
# via build
pyyaml==6.0.1
# via pre-commit
+tomli==2.0.1
+ # via
+ # build
+ # pip-tools
+ # pyproject-api
+ # tox
toposort==1.10
# via pip-compile-multi
tox==4.6.4
diff --git a/setup.py b/setup.py
index c29e224500..501119d408 100644
--- a/setup.py
+++ b/setup.py
@@ -80,7 +80,7 @@ setup(
"cryptography>=39.0.1, <40",
"deprecation>=2.1.0, <2.2.0",
"flask>=2.2.5, <3.0.0",
- "flask-appbuilder>=4.3.10, <5.0.0",
+ "flask-appbuilder>=4.3.11, <5.0.0",
"flask-caching>=2.1.0, <3",
"flask-compress>=1.13, <2.0",
"flask-talisman>=1.0.0, <2.0",