This is an automated email from the ASF dual-hosted git repository. rusackas pushed a commit to branch change/33615-chart-data-query-context in repository https://gitbox.apache.org/repos/asf/superset.git
commit 0ca40bb24d994805d71d0ec852afe27539a5c237 Author: Eugene Olkhovski <[email protected]> AuthorDate: Wed Aug 19 05:56:20 2026 -0400 fix(charts): repair CI failures on #33615 query_context PR The master merge into this branch left tests/.../import_test.py scrambled (test bodies shuffled, undefined names admin/config/original_id) and a stray blank line in the v1 importers __init__.py. Reconstruct import_test.py from master's soft-delete suite plus the three query_context synthesis tests, and clear the remaining lint/type failures so CI is green: - ruff: TID251 (use superset.utils.json), E501, I001, and C901 — extract helpers _synthesize_query_context_if_absent (import_chart) and _derive_query_context (backfill CLI) to cut cyclomatic complexity. - pylint: annotate the two batched CLI commits with consider-using-transaction (streaming backfill, not a single unit of work). - mypy: guard the Optional SqlaTable datasource before .database. - oxlint (frontend): fix no-new-func, prefer-template, no-plusplus, no-unused-vars and jest consistent-test-it in the gen-qc scripts and parity.test.ts. - RAT license check: add Apache headers to the three gen-qc *.mjs scripts. - oxfmt: format the generated registry/entry and the query_context fixtures. - .gitignore: restore entries dropped by the merge and ignore the generated _bundles/*.js artifact (documented as not committed). Co-Authored-By: Claude Opus 4.8 <[email protected]> --- .gitignore | 8 +- superset-frontend/scripts/gen-qc-fixtures.mjs | 36 +++++- superset-frontend/scripts/gen-qc-goldens.mjs | 28 ++++- superset-frontend/scripts/gen-qc-registry.mjs | 41 ++++++- .../__fixtures__/expected/big_number.json | 61 +++-------- .../__fixtures__/expected/big_number_total.json | 42 ++----- .../__fixtures__/expected/box_plot.json | 42 ++----- .../__fixtures__/expected/bubble_v2.json | 42 ++----- .../__fixtures__/expected/echarts_area.json | 52 ++------- .../__fixtures__/expected/echarts_timeseries.json | 52 ++------- .../expected/echarts_timeseries_bar.json | 52 ++------- .../expected/echarts_timeseries_line.json | 52 ++------- .../expected/echarts_timeseries_scatter.json | 52 ++------- .../expected/echarts_timeseries_smooth.json | 52 ++------- .../expected/echarts_timeseries_step.json | 52 ++------- .../__fixtures__/expected/funnel.json | 42 ++----- .../__fixtures__/expected/gauge_chart.json | 42 ++----- .../__fixtures__/expected/graph_chart.json | 42 ++----- .../__fixtures__/expected/handlebars.json | 49 ++------- .../__fixtures__/expected/heatmap_v2.json | 37 ++----- .../__fixtures__/expected/histogram_v2.json | 42 ++----- .../__fixtures__/expected/mixed_timeseries.json | 67 +++--------- .../__fixtures__/expected/pie.json | 50 ++------- .../__fixtures__/expected/pivot_table_v2.json | 44 ++------ .../__fixtures__/expected/pop_kpi.json | 42 ++----- .../__fixtures__/expected/radar.json | 49 ++------- .../__fixtures__/expected/sankey_v2.json | 47 ++------ .../__fixtures__/expected/sunburst_v2.json | 42 ++----- .../__fixtures__/expected/table.json | 42 ++----- .../__fixtures__/expected/tree_chart.json | 42 ++----- .../__fixtures__/expected/treemap_v2.json | 42 ++----- .../__fixtures__/expected/waterfall.json | 47 ++------ .../__fixtures__/expected/word_cloud.json | 42 ++----- .../__fixtures__/formdata/big_number.json | 29 ++--- .../__fixtures__/formdata/big_number_total.json | 29 ++--- .../__fixtures__/formdata/box_plot.json | 29 ++--- .../__fixtures__/formdata/bubble_v2.json | 29 ++--- .../__fixtures__/formdata/echarts_area.json | 29 ++--- .../__fixtures__/formdata/echarts_timeseries.json | 29 ++--- .../formdata/echarts_timeseries_bar.json | 29 ++--- .../formdata/echarts_timeseries_line.json | 29 ++--- .../formdata/echarts_timeseries_scatter.json | 29 ++--- .../formdata/echarts_timeseries_smooth.json | 29 ++--- .../formdata/echarts_timeseries_step.json | 29 ++--- .../__fixtures__/formdata/funnel.json | 29 ++--- .../__fixtures__/formdata/gauge_chart.json | 29 ++--- .../__fixtures__/formdata/graph_chart.json | 29 ++--- .../__fixtures__/formdata/handlebars.json | 29 ++--- .../__fixtures__/formdata/heatmap_v2.json | 29 ++--- .../__fixtures__/formdata/histogram_v2.json | 29 ++--- .../__fixtures__/formdata/mixed_timeseries.json | 29 ++--- .../__fixtures__/formdata/pie.json | 29 ++--- .../__fixtures__/formdata/pivot_table_v2.json | 29 ++--- .../__fixtures__/formdata/pop_kpi.json | 29 ++--- .../__fixtures__/formdata/radar.json | 29 ++--- .../__fixtures__/formdata/sankey_v2.json | 29 ++--- .../__fixtures__/formdata/sunburst_v2.json | 29 ++--- .../__fixtures__/formdata/table.json | 29 ++--- .../__fixtures__/formdata/tree_chart.json | 29 ++--- .../__fixtures__/formdata/treemap_v2.json | 29 ++--- .../__fixtures__/formdata/waterfall.json | 29 ++--- .../__fixtures__/formdata/word_cloud.json | 29 ++--- .../src/backend-querycontext/entry.ts | 4 +- .../src/backend-querycontext/parity.test.ts | 2 +- .../src/backend-querycontext/registry.generated.ts | 58 +++++----- superset/cli/charts.py | 86 +++++++++------ superset/commands/chart/importers/v1/utils.py | 121 +++++++++++---------- superset/commands/chart/query_context_builder.py | 4 +- superset/commands/chart/query_context_generator.py | 11 +- tests/integration_tests/charts/commands_tests.py | 14 +-- tests/integration_tests/charts/data/api_tests.py | 4 +- .../charts/commands/importers/v1/import_test.py | 70 ------------ .../importers/v1/query_context_builder_test.py | 6 +- .../importers/v1/query_context_parity_test.py | 3 +- 74 files changed, 790 insertions(+), 1908 deletions(-) diff --git a/.gitignore b/.gitignore index 69ed5344cb0..9c17c161824 100644 --- a/.gitignore +++ b/.gitignore @@ -128,6 +128,10 @@ docker-compose.override.yml .temp_cache +# Generated backend query_context bundle (built via +# `npm run build:backend-querycontext`; see superset/commands/chart/_bundles/README.md) +superset/commands/chart/_bundles/*.js + # Jest test report test-report.html superset/static/stats/statistics.html @@ -143,7 +147,3 @@ PROJECT.md oxc-custom-build/ *.code-workspace *.duckdb - -# Generated backend query-context bundle (#33615) — built via -# `npm run build:backend-querycontext`, never committed. -superset/commands/chart/_bundles/query_context_bundle.js diff --git a/superset-frontend/scripts/gen-qc-fixtures.mjs b/superset-frontend/scripts/gen-qc-fixtures.mjs index 654c472aeb6..cf449b551bc 100644 --- a/superset-frontend/scripts/gen-qc-fixtures.mjs +++ b/superset-frontend/scripts/gen-qc-fixtures.mjs @@ -1,9 +1,28 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + // Generates a minimal-but-valid form_data fixture + frontend golden for every viz // type in the generated REGISTRY, by actually running each plugin's buildQuery under // Node's V8. A viz is COVERED if its builder returns a real query_context on the base // form_data; otherwise it's honestly SKIPPED (reason recorded) — never faked. import { build } from 'esbuild'; -import { readFileSync, writeFileSync, mkdirSync } from 'node:fs'; +import { writeFileSync, mkdirSync } from 'node:fs'; import { createRequire } from 'node:module'; const require = createRequire(import.meta.url); @@ -30,7 +49,14 @@ shim('window', globalThis); shim('navigator', { userAgent: 'superset-fixtures-node' }); shim('document', {}); const mod = { exports: {} }; -new Function('module', 'exports', 'require', res.outputFiles[0].text)(mod, mod.exports, require); +// eslint-disable-next-line no-new-func -- evaluating our own freshly built bundle +const load = new Function( + 'module', + 'exports', + 'require', + res.outputFiles[0].text, +); +load(mod, mod.exports, require); const gen = mod.exports.generateQueryContext; const VIZ_TYPES = mod.exports.VIZ_TYPES || globalThis.SUPERSET_QC_VIZ_TYPES; @@ -96,13 +122,13 @@ for (const viz of VIZ_TYPES) { skipped.push([viz, 'no queries produced']); continue; } - writeFileSync(`${FEX}/formdata/${viz}.json`, JSON.stringify(fd, null, 2) + '\n'); - writeFileSync(`${FEX}/expected/${viz}.json`, JSON.stringify(out, null, 2) + '\n'); + writeFileSync(`${FEX}/formdata/${viz}.json`, `${JSON.stringify(fd, null, 2)}\n`); + writeFileSync(`${FEX}/expected/${viz}.json`, `${JSON.stringify(out, null, 2)}\n`); covered.push(viz); } console.log(`REGISTRY viz types: ${VIZ_TYPES.length}`); console.log(`COVERED (fixture+golden written): ${covered.length}`); -console.log(' ' + covered.join(', ')); +console.log(` ${covered.join(', ')}`); console.log(`SKIPPED (base form_data insufficient): ${skipped.length}`); for (const [v, r] of skipped) console.log(` - ${v}: ${r}`); diff --git a/superset-frontend/scripts/gen-qc-goldens.mjs b/superset-frontend/scripts/gen-qc-goldens.mjs index 393470c6f45..68944ee6638 100644 --- a/superset-frontend/scripts/gen-qc-goldens.mjs +++ b/superset-frontend/scripts/gen-qc-goldens.mjs @@ -1,3 +1,22 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + // Records frontend query_context goldens by running the SAME buildQuery entry // under Node's V8 (independent of the backend mini-racer runtime). Pure buildQuery // logic → identical output to the browser. Writes __fixtures__/expected/<stem>.json. @@ -32,7 +51,9 @@ shim('window', globalThis); shim('navigator', { userAgent: 'superset-goldens-node' }); shim('document', {}); const mod = { exports: {} }; -new Function('module', 'exports', 'require', code)(mod, mod.exports, require); +// eslint-disable-next-line no-new-func -- evaluating our own freshly built bundle +const load = new Function('module', 'exports', 'require', code); +load(mod, mod.exports, require); const gen = mod.exports.generateQueryContext || globalThis.generateQueryContext; if (typeof gen !== 'function') throw new Error('generateQueryContext not found in bundle'); @@ -46,6 +67,9 @@ for (const f of readdirSync(`${FEX}/formdata`)) { if (parsed && (parsed.__unsupported__ || parsed.__error__)) { throw new Error(`golden gen failed for ${stem}: ${outStr}`); } - writeFileSync(`${FEX}/expected/${stem}.json`, JSON.stringify(parsed, null, 2) + '\n'); + writeFileSync( + `${FEX}/expected/${stem}.json`, + `${JSON.stringify(parsed, null, 2)}\n`, + ); console.log(`golden recorded: ${stem} (queries=${(parsed.queries || []).length})`); } diff --git a/superset-frontend/scripts/gen-qc-registry.mjs b/superset-frontend/scripts/gen-qc-registry.mjs index d0c29280438..5fad639e24c 100644 --- a/superset-frontend/scripts/gen-qc-registry.mjs +++ b/superset-frontend/scripts/gen-qc-registry.mjs @@ -1,3 +1,22 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + // Deterministic, re-runnable codegen: maps every plugin `buildQuery` module to the // viz_type key(s) it is registered under, and emits registry.generated.ts consumed // by entry.ts. Join: buildQuery module <- (index.ts that imports it) -> plugin class @@ -66,7 +85,13 @@ const buildQueryFiles = files.filter((f) => /[/\\]buildQuery\.(ts|js)$/.test(f)) // resolve an import specifier from a file to an absolute module file (ts/js/index) function resolveImport(fromFile, spec) { const base = path.resolve(path.dirname(fromFile), spec); - for (const c of [base, base + '.ts', base + '.js', path.join(base, 'index.ts'), path.join(base, 'index.js')]) { + for (const c of [ + base, + `${base}.ts`, + `${base}.js`, + path.join(base, 'index.ts'), + path.join(base, 'index.js'), + ]) { if (existsSync(c) && statSync(c).isFile()) return path.resolve(c); } return null; @@ -149,10 +174,14 @@ const nameByPath = new Map(); let n = 0; for (const [, abs] of entries) { if (!nameByPath.has(abs)) { - const id = `bq${n++}`; + const id = `bq${n}`; + n += 1; nameByPath.set(abs, id); - let rel = path.relative(path.dirname(OUT), abs).replace(/\\/g, '/').replace(/\.(ts|js)$/, ''); - if (!rel.startsWith('.')) rel = './' + rel; + let rel = path + .relative(path.dirname(OUT), abs) + .replace(/\\/g, '/') + .replace(/\.(ts|js)$/, ''); + if (!rel.startsWith('.')) rel = `./${rel}`; imports += `import ${id} from '${rel}';\n`; } } @@ -177,11 +206,11 @@ const header = `// Licensed to the Apache Software Foundation (ASF) under one // GENERATED by superset-frontend/scripts/gen-qc-registry.mjs — DO NOT EDIT. // Re-run: node scripts/gen-qc-registry.mjs `; -writeFileSync(OUT, header + '\n' + imports + '\n' + body, 'utf8'); +writeFileSync(OUT, `${header}\n${imports}\n${body}`, 'utf8'); console.log(`buildQuery modules: ${buildQueryFiles.length}`); console.log(`viz keys mapped: ${entries.length}`); -console.log('keys: ' + entries.map(([v]) => v).join(', ')); +console.log(`keys: ${entries.map(([v]) => v).join(', ')}`); console.log(`unmapped buildQuery (no MainPreset key): ${unmapped.length}`); for (const u of unmapped) console.log(` - ${u.bq} (classes: ${u.classes.join(',') || 'none'})`); console.log(`wrote ${path.relative(FE, OUT)}`); diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/big_number.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/big_number.json index d27168e8434..bcda82fff1a 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/big_number.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/big_number.json @@ -24,14 +24,10 @@ "expressionType": "SQL" } ], - "metrics": [ - "count" - ], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -41,12 +37,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -79,14 +71,10 @@ "expressionType": "SQL" } ], - "metrics": [ - "count" - ], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -96,12 +84,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -117,24 +101,13 @@ "datasource": "1__table", "viz_type": "big_number", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -151,12 +124,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/big_number_total.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/big_number_total.json index 79ad5925de6..165432b3df3 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/big_number_total.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/big_number_total.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "big_number_total", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/box_plot.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/box_plot.json index 51a97d3fec8..31896dc2b01 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/box_plot.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/box_plot.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "gender" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "gender"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -39,24 +32,13 @@ "datasource": "1__table", "viz_type": "box_plot", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -73,12 +55,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/bubble_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/bubble_v2.json index b52a1b081a6..1f442b84efd 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/bubble_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/bubble_v2.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "gender" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "gender"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "bubble_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_area.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_area.json index d8b04ba544f..0b79c4028c0 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_area.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_area.json @@ -25,20 +25,11 @@ }, "gender" ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -49,12 +40,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -73,24 +60,13 @@ "datasource": "1__table", "viz_type": "echarts_area", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -107,12 +83,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries.json index 1c825c79428..de6008da7eb 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries.json @@ -25,20 +25,11 @@ }, "gender" ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -49,12 +40,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -73,24 +60,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -107,12 +83,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_bar.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_bar.json index 18b4e23eff4..43f3ce58d77 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_bar.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_bar.json @@ -25,20 +25,11 @@ }, "gender" ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -49,12 +40,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -73,24 +60,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_bar", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -107,12 +83,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_line.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_line.json index 3fe112ee3c5..0cd2b15454d 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_line.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_line.json @@ -25,20 +25,11 @@ }, "gender" ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -49,12 +40,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -73,24 +60,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_line", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -107,12 +83,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_scatter.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_scatter.json index 50fb1b59b48..2d8a5ebda3c 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_scatter.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_scatter.json @@ -25,20 +25,11 @@ }, "gender" ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -49,12 +40,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -73,24 +60,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_scatter", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -107,12 +83,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_smooth.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_smooth.json index eaafc4f70e6..9cfc18e0650 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_smooth.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_smooth.json @@ -25,20 +25,11 @@ }, "gender" ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -49,12 +40,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -73,24 +60,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_smooth", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -107,12 +83,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_step.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_step.json index 479694214f7..e2c3dbc964e 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_step.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/echarts_timeseries_step.json @@ -25,20 +25,11 @@ }, "gender" ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -49,12 +40,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -73,24 +60,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_step", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -107,12 +83,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/funnel.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/funnel.json index abef3201d9a..cc0f1be58ad 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/funnel.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/funnel.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "funnel", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/gauge_chart.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/gauge_chart.json index cae2ec8637c..f00758542f5 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/gauge_chart.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/gauge_chart.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "gauge_chart", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/graph_chart.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/graph_chart.json index c9a6aa33129..129fd5a7729 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/graph_chart.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/graph_chart.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "graph_chart", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/handlebars.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/handlebars.json index 87b87894901..a500ea4d19d 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/handlebars.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/handlebars.json @@ -15,24 +15,12 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "columns": ["gender", "name"], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -44,24 +32,13 @@ "datasource": "1__table", "viz_type": "handlebars", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -78,12 +55,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/heatmap_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/heatmap_v2.json index 727bce82b58..c887a16680b 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/heatmap_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/heatmap_v2.json @@ -25,15 +25,11 @@ }, "gender" ], - "metrics": [ - "count" - ], + "metrics": ["count"], "orderby": [], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -53,24 +49,13 @@ "datasource": "1__table", "viz_type": "heatmap_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -87,12 +72,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/histogram_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/histogram_v2.json index 2664d0be527..e4be02df827 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/histogram_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/histogram_v2.json @@ -15,15 +15,10 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "num" - ], + "columns": ["gender", "num"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -34,9 +29,7 @@ "operation": "histogram", "options": { "column": "num", - "groupby": [ - "gender" - ], + "groupby": ["gender"], "bins": 5 } } @@ -47,24 +40,13 @@ "datasource": "1__table", "viz_type": "histogram_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -81,12 +63,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/mixed_timeseries.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/mixed_timeseries.json index ba1c2047187..b48e6abd522 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/mixed_timeseries.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/mixed_timeseries.json @@ -25,14 +25,10 @@ }, "gender" ], - "metrics": [ - "count" - ], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "url_params": {}, "custom_params": {}, @@ -42,12 +38,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -60,12 +52,7 @@ "operation": "flatten" } ], - "orderby": [ - [ - "count", - false - ] - ] + "orderby": [["count", false]] }, { "time_range": "No filter", @@ -87,14 +74,10 @@ }, "gender" ], - "metrics": [ - "count" - ], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "url_params": {}, "custom_params": {}, @@ -104,12 +87,8 @@ { "operation": "pivot", "options": { - "index": [ - "ds" - ], - "columns": [ - "gender" - ], + "index": ["ds"], + "columns": ["gender"], "aggregates": { "count": { "operator": "mean" @@ -122,36 +101,20 @@ "operation": "flatten" } ], - "orderby": [ - [ - "count", - false - ] - ] + "orderby": [["count", false]] } ], "form_data": { "datasource": "1__table", "viz_type": "mixed_timeseries", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/pie.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/pie.json index 46931d7cff0..7c8ea2876fa 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/pie.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/pie.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -36,12 +29,8 @@ { "operation": "contribution", "options": { - "columns": [ - "count" - ], - "rename_columns": [ - "count__contribution" - ] + "columns": ["count"], + "rename_columns": ["count__contribution"] } } ] @@ -51,24 +40,13 @@ "datasource": "1__table", "viz_type": "pie", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -85,12 +63,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/pivot_table_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/pivot_table_v2.json index 83bca36357a..9d4bee6f142 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/pivot_table_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/pivot_table_v2.json @@ -16,20 +16,11 @@ }, "applied_time_extras": {}, "columns": [], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -41,24 +32,13 @@ "datasource": "1__table", "viz_type": "pivot_table_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -75,12 +55,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/pop_kpi.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/pop_kpi.json index b74efd35e9c..61f74bab338 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/pop_kpi.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/pop_kpi.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -40,24 +33,13 @@ "datasource": "1__table", "viz_type": "pop_kpi", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -74,12 +56,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/radar.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/radar.json index 22369451173..e34097d65f8 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/radar.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/radar.json @@ -15,24 +15,12 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], - "orderby": [ - [ - "count", - false - ] - ], + "columns": ["gender", "name"], + "metrics": ["count"], + "orderby": [["count", false]], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -44,24 +32,13 @@ "datasource": "1__table", "viz_type": "radar", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -78,12 +55,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/sankey_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/sankey_v2.json index eef4e4a2af4..a0fddbef839 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/sankey_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/sankey_v2.json @@ -15,51 +15,30 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, "custom_params": {}, "custom_form_data": {}, - "groupby": [ - "gender", - "name" - ] + "groupby": ["gender", "name"] } ], "form_data": { "datasource": "1__table", "viz_type": "sankey_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -76,12 +55,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/sunburst_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/sunburst_v2.json index f5b15a6da9b..6bf88d04f88 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/sunburst_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/sunburst_v2.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "sunburst_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/table.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/table.json index 86b97a4af2a..6b5ff8f0bb2 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/table.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/table.json @@ -15,19 +15,12 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "orderby": [], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -41,24 +34,13 @@ "datasource": "1__table", "viz_type": "table", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -75,12 +57,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [], "include_time": false }, diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/tree_chart.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/tree_chart.json index f1373c2968f..d8c6be23891 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/tree_chart.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/tree_chart.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "tree_chart", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/treemap_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/treemap_v2.json index d46d2296062..f1d83b1b18d 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/treemap_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/treemap_v2.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "treemap_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/waterfall.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/waterfall.json index 1a2698215ab..8b3c84dadb8 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/waterfall.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/waterfall.json @@ -25,24 +25,14 @@ }, "gender" ], - "metrics": [ - "count" - ], + "metrics": ["count"], "orderby": [ - [ - "ds", - true - ], - [ - "gender", - true - ] + ["ds", true], + ["gender", true] ], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -54,24 +44,13 @@ "datasource": "1__table", "viz_type": "waterfall", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -88,12 +67,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/expected/word_cloud.json b/superset-frontend/src/backend-querycontext/__fixtures__/expected/word_cloud.json index db9279c505b..e3452dc4f68 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/expected/word_cloud.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/expected/word_cloud.json @@ -15,18 +15,11 @@ "where": "" }, "applied_time_extras": {}, - "columns": [ - "gender", - "name" - ], - "metrics": [ - "count" - ], + "columns": ["gender", "name"], + "metrics": ["count"], "annotation_layers": [], "row_limit": 100, - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "series_limit": 0, "order_desc": true, "url_params": {}, @@ -38,24 +31,13 @@ "datasource": "1__table", "viz_type": "word_cloud", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -72,12 +54,8 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] }, "result_format": "json", diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/big_number.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/big_number.json index 03a0967066f..ce625627b77 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/big_number.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/big_number.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "big_number", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/big_number_total.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/big_number_total.json index cad0bc79762..712fdbc8e40 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/big_number_total.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/big_number_total.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "big_number_total", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/box_plot.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/box_plot.json index 020c3f93372..3cd34b1110a 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/box_plot.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/box_plot.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "box_plot", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/bubble_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/bubble_v2.json index 1a4385d444b..114f73faae4 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/bubble_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/bubble_v2.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "bubble_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_area.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_area.json index 7718ec6d60a..08f7abe1443 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_area.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_area.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "echarts_area", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries.json index 684db978e11..4b8245ffefc 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_bar.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_bar.json index 9eae4b2f6ff..3259a02f40d 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_bar.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_bar.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_bar", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_line.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_line.json index b1d26d40dca..e40459e9654 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_line.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_line.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_line", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_scatter.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_scatter.json index 9214b8cea7e..24bb755a8d8 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_scatter.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_scatter.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_scatter", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_smooth.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_smooth.json index 401f24f755e..34f17686ecd 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_smooth.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_smooth.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_smooth", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_step.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_step.json index de097ce1193..3527ff01cd2 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_step.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/echarts_timeseries_step.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "echarts_timeseries_step", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/funnel.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/funnel.json index 6f4781c14c8..d2db27b9081 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/funnel.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/funnel.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "funnel", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/gauge_chart.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/gauge_chart.json index 7337458c7b9..ff79ed4d66e 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/gauge_chart.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/gauge_chart.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "gauge_chart", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/graph_chart.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/graph_chart.json index 32d4f51cf5b..5783c10ef26 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/graph_chart.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/graph_chart.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "graph_chart", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/handlebars.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/handlebars.json index 399e16074bb..ad17378fffc 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/handlebars.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/handlebars.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "handlebars", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/heatmap_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/heatmap_v2.json index 92c3a135237..65dfce9b44d 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/heatmap_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/heatmap_v2.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "heatmap_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/histogram_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/histogram_v2.json index 72e76e603da..ccf7e8d1449 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/histogram_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/histogram_v2.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "histogram_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/mixed_timeseries.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/mixed_timeseries.json index 0aa61b4cad8..22e14a5441b 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/mixed_timeseries.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/mixed_timeseries.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "mixed_timeseries", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pie.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pie.json index 87e7978fb89..05a68137dc1 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pie.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pie.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "pie", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pivot_table_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pivot_table_v2.json index 00cd7863694..a55d6baf652 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pivot_table_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pivot_table_v2.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "pivot_table_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pop_kpi.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pop_kpi.json index 228809f7aaa..4ce24cddfe1 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pop_kpi.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/pop_kpi.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "pop_kpi", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/radar.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/radar.json index a260b26f5be..ad36ce50f1d 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/radar.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/radar.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "radar", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/sankey_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/sankey_v2.json index 8e77577d53b..7445fe0e7d6 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/sankey_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/sankey_v2.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "sankey_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/sunburst_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/sunburst_v2.json index 43230457ca2..c3a73902d1a 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/sunburst_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/sunburst_v2.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "sunburst_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/table.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/table.json index 78261244739..3b9acd468ce 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/table.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/table.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "table", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/tree_chart.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/tree_chart.json index b96aaf0c560..a6dd42ec555 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/tree_chart.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/tree_chart.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "tree_chart", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/treemap_v2.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/treemap_v2.json index a6d10ae26a0..cc184c40e9c 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/treemap_v2.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/treemap_v2.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "treemap_v2", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/waterfall.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/waterfall.json index fcf5782bf91..ce815bd08c9 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/waterfall.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/waterfall.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "waterfall", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/word_cloud.json b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/word_cloud.json index cb2e832a741..0501c027427 100644 --- a/superset-frontend/src/backend-querycontext/__fixtures__/formdata/word_cloud.json +++ b/superset-frontend/src/backend-querycontext/__fixtures__/formdata/word_cloud.json @@ -2,24 +2,13 @@ "datasource": "1__table", "viz_type": "word_cloud", "metric": "count", - "metrics": [ - "count" - ], - "groupby": [ - "gender" - ], - "columns": [ - "gender" - ], - "all_columns": [ - "gender", - "name" - ], + "metrics": ["count"], + "groupby": ["gender"], + "columns": ["gender"], + "all_columns": ["gender", "name"], "entity": "gender", "series": "gender", - "series_columns": [ - "gender" - ], + "series_columns": ["gender"], "x_axis": "ds", "granularity_sqla": "ds", "time_grain_sqla": "P1D", @@ -36,11 +25,7 @@ "y": "count", "size": "count", "column": "num", - "metrics_b": [ - "count" - ], - "groupby_b": [ - "gender" - ], + "metrics_b": ["count"], + "groupby_b": ["gender"], "adhoc_filters_b": [] } diff --git a/superset-frontend/src/backend-querycontext/entry.ts b/superset-frontend/src/backend-querycontext/entry.ts index a47868869f7..4a6989f9cac 100644 --- a/superset-frontend/src/backend-querycontext/entry.ts +++ b/superset-frontend/src/backend-querycontext/entry.ts @@ -64,7 +64,9 @@ export function generateQueryContext( const queryContext = fn(formData); return JSON.stringify(queryContext); } catch (e) { - return JSON.stringify({ __error__: String((e && (e as Error).stack) || e) }); + return JSON.stringify({ + __error__: String((e && (e as Error).stack) || e), + }); } } diff --git a/superset-frontend/src/backend-querycontext/parity.test.ts b/superset-frontend/src/backend-querycontext/parity.test.ts index 9378c4b993e..ffd3745ef66 100644 --- a/superset-frontend/src/backend-querycontext/parity.test.ts +++ b/superset-frontend/src/backend-querycontext/parity.test.ts @@ -49,7 +49,7 @@ describe('backend query-context parity goldens', () => { .filter(f => f.endsWith('.json')) .map(f => f.replace(/\.json$/, '')); - it.each(fixtures)('records + validates query_context for %s', vizType => { + test.each(fixtures)('records + validates query_context for %s', vizType => { const formData = JSON.parse( fs.readFileSync(path.join(FORMDATA_DIR, `${vizType}.json`), 'utf8'), ); diff --git a/superset-frontend/src/backend-querycontext/registry.generated.ts b/superset-frontend/src/backend-querycontext/registry.generated.ts index 51395c80d2e..fc4f0796773 100644 --- a/superset-frontend/src/backend-querycontext/registry.generated.ts +++ b/superset-frontend/src/backend-querycontext/registry.generated.ts @@ -40,35 +40,35 @@ import bq21 from '../../plugins/plugin-chart-echarts/src/Waterfall/buildQuery'; import bq22 from '../../plugins/plugin-chart-word-cloud/src/plugin/buildQuery'; export const REGISTRY: Record<string, (fd: any) => any> = { - 'big_number': bq0 as (fd: any) => any, - 'big_number_total': bq1 as (fd: any) => any, - 'box_plot': bq2 as (fd: any) => any, - 'bubble_v2': bq3 as (fd: any) => any, - 'echarts_area': bq4 as (fd: any) => any, - 'echarts_timeseries': bq4 as (fd: any) => any, - 'echarts_timeseries_bar': bq4 as (fd: any) => any, - 'echarts_timeseries_line': bq4 as (fd: any) => any, - 'echarts_timeseries_scatter': bq4 as (fd: any) => any, - 'echarts_timeseries_smooth': bq4 as (fd: any) => any, - 'echarts_timeseries_step': bq4 as (fd: any) => any, - 'funnel': bq5 as (fd: any) => any, - 'gauge_chart': bq6 as (fd: any) => any, - 'graph_chart': bq7 as (fd: any) => any, - 'handlebars': bq8 as (fd: any) => any, - 'heatmap_v2': bq9 as (fd: any) => any, - 'histogram_v2': bq10 as (fd: any) => any, - 'mixed_timeseries': bq11 as (fd: any) => any, - 'pie': bq12 as (fd: any) => any, - 'pivot_table_v2': bq13 as (fd: any) => any, - 'pop_kpi': bq14 as (fd: any) => any, - 'radar': bq15 as (fd: any) => any, - 'sankey_v2': bq16 as (fd: any) => any, - 'sunburst_v2': bq17 as (fd: any) => any, - 'table': bq18 as (fd: any) => any, - 'tree_chart': bq19 as (fd: any) => any, - 'treemap_v2': bq20 as (fd: any) => any, - 'waterfall': bq21 as (fd: any) => any, - 'word_cloud': bq22 as (fd: any) => any, + big_number: bq0 as (fd: any) => any, + big_number_total: bq1 as (fd: any) => any, + box_plot: bq2 as (fd: any) => any, + bubble_v2: bq3 as (fd: any) => any, + echarts_area: bq4 as (fd: any) => any, + echarts_timeseries: bq4 as (fd: any) => any, + echarts_timeseries_bar: bq4 as (fd: any) => any, + echarts_timeseries_line: bq4 as (fd: any) => any, + echarts_timeseries_scatter: bq4 as (fd: any) => any, + echarts_timeseries_smooth: bq4 as (fd: any) => any, + echarts_timeseries_step: bq4 as (fd: any) => any, + funnel: bq5 as (fd: any) => any, + gauge_chart: bq6 as (fd: any) => any, + graph_chart: bq7 as (fd: any) => any, + handlebars: bq8 as (fd: any) => any, + heatmap_v2: bq9 as (fd: any) => any, + histogram_v2: bq10 as (fd: any) => any, + mixed_timeseries: bq11 as (fd: any) => any, + pie: bq12 as (fd: any) => any, + pivot_table_v2: bq13 as (fd: any) => any, + pop_kpi: bq14 as (fd: any) => any, + radar: bq15 as (fd: any) => any, + sankey_v2: bq16 as (fd: any) => any, + sunburst_v2: bq17 as (fd: any) => any, + table: bq18 as (fd: any) => any, + tree_chart: bq19 as (fd: any) => any, + treemap_v2: bq20 as (fd: any) => any, + waterfall: bq21 as (fd: any) => any, + word_cloud: bq22 as (fd: any) => any, }; export const VIZ_TYPES: string[] = Object.keys(REGISTRY); diff --git a/superset/cli/charts.py b/superset/cli/charts.py index 2769214318c..b1458e37d80 100644 --- a/superset/cli/charts.py +++ b/superset/cli/charts.py @@ -19,6 +19,7 @@ from __future__ import annotations import logging +from typing import Any, Optional import click from flask.cli import with_appcontext @@ -31,6 +32,39 @@ def charts() -> None: """Chart-related maintenance commands.""" +def _derive_query_context(chart: Any, generator: Any) -> Optional[dict[str, Any]]: + """ + Derive a ``query_context`` config for ``chart``, or ``None`` if non-derivable. + + Prefers the authoritative frontend ``buildQuery`` (V8) and falls back to the + pure-Python generic derivation; the datasource is taken from the chart's own + resolved id/type, never from ``params`` (authz-preserving). + """ + from superset.commands.chart.query_context_builder import ( + build_query_context_config, + ) + from superset.utils import json + + params = json.loads(chart.params) if chart.params else {} + if not isinstance(params, dict): + params = {} + datasource_id = chart.datasource_id + datasource_type = chart.datasource_type or "table" + + context = None + if datasource_id: + js_params = { + **params, + "datasource": f"{datasource_id}__{datasource_type}", + } + context = generator.generate(chart.viz_type, js_params) + if context is None: + context = build_query_context_config( + params, chart.viz_type, datasource_id, datasource_type + ) + return context + + @charts.command("backfill-query-context") @with_appcontext @click.option( @@ -65,9 +99,6 @@ def backfill_query_context( Non-derivable charts are left untouched (never a fabricated context). """ # Imported lazily so the module imports cleanly without an app context. - from superset.commands.chart.query_context_builder import ( - build_query_context_config, - ) from superset.commands.chart.query_context_generator import ( get_query_context_generator, ) @@ -95,45 +126,30 @@ def backfill_query_context( for chart in query.yield_per(batch_size): try: - params = json.loads(chart.params) if chart.params else {} - if not isinstance(params, dict): - params = {} - datasource_id = chart.datasource_id - datasource_type = chart.datasource_type or "table" - - context = None - if datasource_id: - js_params = { - **params, - "datasource": f"{datasource_id}__{datasource_type}", - } - context = generator.generate(chart.viz_type, js_params) - if context is None: - context = build_query_context_config( - params, chart.viz_type, datasource_id, datasource_type - ) - - if context is None: - non_derivable += 1 - continue - - updated += 1 - if dry_run: - continue - - chart.query_context = json.dumps(context) - pending += 1 - if pending >= batch_size: - db.session.commit() - pending = 0 + context = _derive_query_context(chart, generator) except Exception as ex: # pylint: disable=broad-except errors += 1 logger.warning( "backfill-query-context: chart id=%s failed: %s", chart.id, ex ) + continue + + if context is None: + non_derivable += 1 + continue + + updated += 1 + if dry_run: + continue + + chart.query_context = json.dumps(context) + pending += 1 + if pending >= batch_size: + db.session.commit() # pylint: disable=consider-using-transaction + pending = 0 if not dry_run and pending: - db.session.commit() + db.session.commit() # pylint: disable=consider-using-transaction prefix = "[dry-run] would update" if dry_run else "updated" click.echo( diff --git a/superset/commands/chart/importers/v1/utils.py b/superset/commands/chart/importers/v1/utils.py index b9a202e12bf..a4c53b529ea 100644 --- a/superset/commands/chart/importers/v1/utils.py +++ b/superset/commands/chart/importers/v1/utils.py @@ -145,6 +145,69 @@ def _prepare_existing_chart_for_import( return None +def _synthesize_query_context_if_absent(config: dict[str, Any]) -> None: + """ + Synthesize a ``query_context`` for an imported chart that arrives without + one, so the first ``GET /api/v1/chart/{pk}/data/`` returns data instead of + HTTP 400 "Chart has no query context saved" (issue #33615, ADR-013). Guarded + on an ABSENT context so an existing/remapped one is never overwritten + (FR-006); mutates ``config`` in place. + + Two-tier derivation: + 1. AUTHORITATIVE — run the chart's real frontend ``buildQuery`` in V8 + (QueryContextGenerator) for byte-faithful parity with the UI. + 2. FALLBACK — a pure-Python generic derivation + (``build_query_context_config``) when the V8 bundle / py_mini_racer is + unavailable or the viz type is not (yet) covered by the bundle. + Either way the datasource is taken from the importer-resolved id/type ONLY, + never a value carried in params (ADR-014 authz/RLS). A per-chart derivation + error must never abort the bundle (RISK-T03 / FR-004). + """ + if config.get("query_context"): + return + try: + params = config.get("params") or {} + viz_type = config["viz_type"] + datasource_id = config.get("datasource_id") + datasource_type = config.get("datasource_type", "table") + + query_context_config = None + if datasource_id: + # form_data for the JS builder: the datasource is the + # importer-resolved id/type only (overwrite any incoming + # params.datasource — never trust it; ADR-014). + js_params = { + **params, + "datasource": f"{datasource_id}__{datasource_type}", + } + query_context_config = get_query_context_generator().generate( + viz_type, js_params + ) + if query_context_config is None: + query_context_config = build_query_context_config( + params, viz_type, datasource_id, datasource_type + ) + + if query_context_config is not None: + config["query_context"] = json.dumps(query_context_config) + logger.info( + "Synthesized query_context for imported chart %s (queryable)", + config.get("uuid"), + ) + else: + logger.info( + "Imported chart %s classified non-derivable; query_context left empty", + config.get("uuid"), + ) + except Exception: # pylint: disable=broad-except + # Non-derivable on error: leave query_context unset and keep going. + logger.warning( + "query_context synthesis failed for imported chart %s; " + "importing without a query_context", + config.get("uuid"), + ) + + def import_chart( config: dict[str, Any], overwrite: bool = False, @@ -204,63 +267,7 @@ def import_chart( filter_chart_annotations(config) - # Synthesize a query_context for imported charts that arrive without one, so - # the first `GET /api/v1/chart/{pk}/data/` returns data instead of HTTP 400 - # "Chart has no query context saved" (issue #33615, ADR-013). Guarded on an - # ABSENT context so an existing/remapped one is never overwritten (FR-006). - # - # Two-tier derivation: - # 1. AUTHORITATIVE — run the chart's real frontend `buildQuery` in V8 - # (QueryContextGenerator) for byte-faithful parity with the UI. - # 2. FALLBACK — a pure-Python generic derivation - # (`build_query_context_config`) when the V8 bundle / py_mini_racer is - # unavailable or the viz type is not (yet) covered by the bundle. - # Either way the datasource is taken from the importer-resolved id/type ONLY, - # never a value carried in params (ADR-014 authz/RLS). A per-chart derivation - # error must never abort the bundle (RISK-T03 / FR-004). - if not config.get("query_context"): - try: - params = config.get("params") or {} - viz_type = config["viz_type"] - datasource_id = config.get("datasource_id") - datasource_type = config.get("datasource_type", "table") - - query_context_config = None - if datasource_id: - # form_data for the JS builder: the datasource is the - # importer-resolved id/type only (overwrite any incoming - # params.datasource — never trust it; ADR-014). - js_params = { - **params, - "datasource": f"{datasource_id}__{datasource_type}", - } - query_context_config = get_query_context_generator().generate( - viz_type, js_params - ) - if query_context_config is None: - query_context_config = build_query_context_config( - params, viz_type, datasource_id, datasource_type - ) - - if query_context_config is not None: - config["query_context"] = json.dumps(query_context_config) - logger.info( - "Synthesized query_context for imported chart %s (queryable)", - config.get("uuid"), - ) - else: - logger.info( - "Imported chart %s classified non-derivable; " - "query_context left empty", - config.get("uuid"), - ) - except Exception: # pylint: disable=broad-except - # Non-derivable on error: leave query_context unset and keep going. - logger.warning( - "query_context synthesis failed for imported chart %s; " - "importing without a query_context", - config.get("uuid"), - ) + _synthesize_query_context_if_absent(config) # TODO (betodealmeida): move this logic to import_from_dict config["params"] = json.dumps(config["params"]) diff --git a/superset/commands/chart/query_context_builder.py b/superset/commands/chart/query_context_builder.py index 1b07ed1d375..c764787c0f7 100644 --- a/superset/commands/chart/query_context_builder.py +++ b/superset/commands/chart/query_context_builder.py @@ -111,9 +111,7 @@ def _derive_orderby(params: dict[str, Any]) -> list[list[Any]]: normalized.append([entry, order_asc]) return normalized - sort_metric = params.get("timeseries_limit_metric") or params.get( - "sort_by_metric" - ) + sort_metric = params.get("timeseries_limit_metric") or params.get("sort_by_metric") if sort_metric: return [[sort_metric, order_asc]] return [] diff --git a/superset/commands/chart/query_context_generator.py b/superset/commands/chart/query_context_generator.py index 05822ad717e..9635d3409fc 100644 --- a/superset/commands/chart/query_context_generator.py +++ b/superset/commands/chart/query_context_generator.py @@ -36,12 +36,13 @@ Build the bundle with ``npm run build:backend-querycontext`` (from from __future__ import annotations -import json import logging import os import threading from typing import Any, Optional +from superset.utils import json + logger = logging.getLogger(__name__) _BUNDLE_PATH = os.path.join( @@ -76,7 +77,9 @@ class QueryContextGenerator: if self._available is not None: return self._available try: - from py_mini_racer import MiniRacer # pylint: disable=import-outside-toplevel + from py_mini_racer import ( + MiniRacer, # pylint: disable=import-outside-toplevel + ) except Exception as ex: # pylint: disable=broad-except self._available = False logger.info( @@ -117,7 +120,9 @@ class QueryContextGenerator: ) return False - def generate(self, viz_type: str, params: dict[str, Any]) -> Optional[dict[str, Any]]: + def generate( + self, viz_type: str, params: dict[str, Any] + ) -> Optional[dict[str, Any]]: """ Run the real frontend ``buildQuery`` for ``viz_type`` over ``params``. diff --git a/tests/integration_tests/charts/commands_tests.py b/tests/integration_tests/charts/commands_tests.py index 85c7f9d358b..4d6fe9e302e 100644 --- a/tests/integration_tests/charts/commands_tests.py +++ b/tests/integration_tests/charts/commands_tests.py @@ -345,9 +345,7 @@ class TestImportChartsCommand(SupersetTestCase): } ImportChartsCommand(contents, overwrite=True).run() - chart: Slice = ( - db.session.query(Slice).filter_by(uuid=derivable["uuid"]).one() - ) + chart: Slice = db.session.query(Slice).filter_by(uuid=derivable["uuid"]).one() # --- RED anchor: synthesis persisted a non-null context (FR-001) --- assert chart.query_context is not None query_context = json.loads(chart.query_context) @@ -390,7 +388,7 @@ class TestImportChartsCommand(SupersetTestCase): chart: Slice = ( db.session.query(Slice).filter_by(uuid=chart_config["uuid"]).one() ) - # --- RED anchor: context still present; datasource remapped, not synthesized --- + # --- RED anchor: context still present; datasource remapped, not resynthesized assert chart.query_context is not None query_context = json.loads(chart.query_context) assert query_context["datasource"]["id"] == chart.datasource_id @@ -456,11 +454,13 @@ class TestImportChartsCommand(SupersetTestCase): assert markup_chart.query_context is None dataset = derivable_chart.datasource - database = dataset.database + database = dataset.database if dataset else None db.session.delete(derivable_chart) db.session.delete(markup_chart) - db.session.delete(dataset) - db.session.delete(database) + if dataset: + db.session.delete(dataset) + if database: + db.session.delete(database) db.session.commit() @patch("superset.commands.database.importers.v1.utils.add_permissions") diff --git a/tests/integration_tests/charts/data/api_tests.py b/tests/integration_tests/charts/data/api_tests.py index 560dfdf7cda..40cb035ae00 100644 --- a/tests/integration_tests/charts/data/api_tests.py +++ b/tests/integration_tests/charts/data/api_tests.py @@ -1373,9 +1373,7 @@ class TestGetChartDataApi(BaseTestChartDataApi): ) # --- RED anchor: equivalent row data to the saved baseline (FR-002) --- - assert ( - imported["result"][0]["data"] == baseline["result"][0]["data"] - ) + assert imported["result"][0]["data"] == baseline["result"][0]["data"] @pytest.mark.usefixtures("load_birth_names_dashboard_with_slices") def test_synthesized_context_datasource_fidelity(self): diff --git a/tests/unit_tests/charts/commands/importers/v1/import_test.py b/tests/unit_tests/charts/commands/importers/v1/import_test.py index 7134349c52d..20b3c5d047e 100644 --- a/tests/unit_tests/charts/commands/importers/v1/import_test.py +++ b/tests/unit_tests/charts/commands/importers/v1/import_test.py @@ -19,14 +19,12 @@ import copy from collections.abc import Generator from datetime import datetime, timezone -from typing import Any from unittest.mock import patch import pytest import yaml from flask_appbuilder.security.sqla.models import Role, User from pytest_mock import MockerFixture -from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm.session import Session from superset import security_manager @@ -584,71 +582,3 @@ def test_import_tag_logic_for_charts(session_with_schema: Session): .all() ) assert len(associated_tags) == 0 - - -def test_import_tag_savepoint_keeps_session_usable( - mocker: MockerFixture, session_with_schema: Session -) -> None: - """ - When a single tag operation fails with a SQLAlchemyError (e.g. a unique - constraint violation from a concurrent import), the per-tag SAVEPOINT - isolates the failure so the session is not left in a pending-rollback - state, and the remaining tags still import successfully. - """ - contents = { - "tags.yaml": yaml.dump( - { - "tags": [ - {"tag_name": "tag_1", "description": "Description for tag_1"}, - {"tag_name": "tag_2", "description": "Description for tag_2"}, - ] - } - ) - } - - object_id = 1 - object_type = "chart" - - # Simulate a unique-constraint violation discovered when the first - # TaggedObject's SAVEPOINT is flushed (e.g. a concurrent import already - # created the same association) -- not synchronously from Session.add(). - # `import_tag`'s own pre-insert existence check would normally catch a - # real duplicate row, so the failure is injected at the point SQLAlchemy - # actually persists the pending row: `begin_nested()`'s implicit flush - # on a successful `with` exit, which calls `Session.flush()` directly - # (see `SessionTransaction._prepare_impl`). - pending_tagged_objects: list[TaggedObject] = [] - original_add = session_with_schema.add - - def tracking_add(obj: object) -> None: - if isinstance(obj, TaggedObject): - pending_tagged_objects.append(obj) - original_add(obj) - - original_flush = session_with_schema.flush - - def flaky_flush(*args: Any, **kwargs: Any) -> None: - # Only the first TaggedObject ever added should fail, and only while - # it's still pending -- once its SAVEPOINT rolls back, SQLAlchemy - # expunges it from the session, so this does not also fail tag_2's - # flush. - if ( - pending_tagged_objects - and pending_tagged_objects[0] is not None - and pending_tagged_objects[0] in session_with_schema.new - ): - raise SQLAlchemyError("UNIQUE constraint failed: tagged_object") - original_flush(*args, **kwargs) - - mocker.patch.object(session_with_schema, "add", side_effect=tracking_add) - mocker.patch.object(session_with_schema, "flush", side_effect=flaky_flush) - - with patch.object(feature_flag_manager, "is_feature_enabled", return_value=True): - new_tag_ids = import_tag( - ["tag_1", "tag_2"], contents, object_id, object_type, session_with_schema - ) - - # tag_1 failed on the unique violation, but tag_2 succeeded. - assert len(new_tag_ids) == 1 - # The session is still usable — no PendingRollbackError. - assert session_with_schema.query(TaggedObject).count() == 1 diff --git a/tests/unit_tests/charts/commands/importers/v1/query_context_builder_test.py b/tests/unit_tests/charts/commands/importers/v1/query_context_builder_test.py index 2f7945ea36f..538cd728cf4 100644 --- a/tests/unit_tests/charts/commands/importers/v1/query_context_builder_test.py +++ b/tests/unit_tests/charts/commands/importers/v1/query_context_builder_test.py @@ -146,7 +146,11 @@ def test_adhoc_sql_filter_routed_to_extras_and_no_crash() -> None: "metrics": ["sum__num"], "adhoc_filters": [ {"expressionType": "SQL", "sqlExpression": "num > 0", "clause": "WHERE"}, - {"expressionType": "SQL", "sqlExpression": "sum(num) > 1", "clause": "HAVING"}, + { + "expressionType": "SQL", + "sqlExpression": "sum(num) > 1", + "clause": "HAVING", + }, {"expressionType": "SIMPLE"}, # unmappable → dropped, no crash "not-a-dict", # junk → skipped, no crash ], diff --git a/tests/unit_tests/charts/commands/importers/v1/query_context_parity_test.py b/tests/unit_tests/charts/commands/importers/v1/query_context_parity_test.py index 640ea2e458e..baf1d4ae62c 100644 --- a/tests/unit_tests/charts/commands/importers/v1/query_context_parity_test.py +++ b/tests/unit_tests/charts/commands/importers/v1/query_context_parity_test.py @@ -32,11 +32,12 @@ coverage = a fixture per registered viz type (follow-on). from __future__ import annotations -import json from pathlib import Path import pytest +from superset.utils import json + pytest.importorskip("py_mini_racer") # repo_root/tests/unit_tests/charts/commands/importers/v1/<this file>
