Compare commits

...
Author SHA1 Message Date
Joe Li a661d00d1d Merge branch 'master' into showtime-master 2026-09-09 15:11:21 -07:00
Evan RusackasandClaude Code 3f780c503e fix(ci): add per-PR concurrency to the Showtime trigger workflow (#44120)
Co-authored-by: Claude Code <noreply@anthropic.com>
2026-09-09 15:06:47 -07:00
Elizabeth ThompsonandClaude 62fa7a371b fix(charts/data): return 400 instead of 500 on reversed date range (SC-118279) (#43517)
Co-authored-by: Claude <noreply@anthropic.com>
2026-09-09 15:03:04 -07:00
Elizabeth ThompsonandClaude Opus 5 e4440b614c fix(database): reject non-dict extra field in extra_validator (#44092)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 15:02:55 -07:00
dependabot[bot]andhainenber a9424afb4e chore(deps-dev): remove unused globals from /superset-websocket (#44047)
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: hainenber <dotronghai96@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: hainenber <dotronghai96@gmail.com>
2026-09-09 14:55:05 -07:00
b75f629286 chore(deps-dev): bump oxlint from 1.80.0 to 1.81.0 in /superset-frontend (#44057)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: rusackas <evan@rusackas.com>
Co-authored-by: Evan Rusackas <evan@preset.io>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-09 14:55:01 -07:00
Joe Li 33a4373cb4 Merge branch 'master' into showtime-master 2026-09-09 10:16:30 -07:00
Joe Li b658739aff Merge remote-tracking branch 'origin/master' into HEAD 2026-09-09 07:07:19 -07:00
Joe Li d27500a08f Merge remote-tracking branch 'origin/master' into HEAD 2026-09-08 09:30:35 -07:00
Joe Li 83e3dcd932 Merge remote-tracking branch 'origin/master' into HEAD 2026-09-07 16:33:06 -07:00
Joe Li bb60298b88 Merge remote-tracking branch 'origin/master' into HEAD 2026-09-04 07:18:24 -07:00
Joe Li c10f74ba7c Merge remote-tracking branch 'origin/master' into HEAD 2026-09-03 07:06:30 -07:00
Joe Li aaf76687f9 Merge branch 'master' into showtime-master 2026-09-02 11:56:19 -07:00
Joe Li 7e51e3a0ed Merge remote-tracking branch 'origin/master' into HEAD 2026-09-02 07:20:07 -07:00
Joe Li 0b35b9ae98 Merge remote-tracking branch 'origin/master' into HEAD 2026-09-01 07:08:24 -07:00
Joe Li a211aa7b39 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-31 07:08:54 -07:00
Joe Li ec11e17bdb Merge remote-tracking branch 'origin/master' into HEAD 2026-08-28 07:18:58 -07:00
Joe Li 1068e253d4 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-27 07:08:51 -07:00
Joe Li 38cc25b889 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-26 07:19:19 -07:00
Joe Li 8706b68971 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-25 07:10:33 -07:00
Joe Li c917b3d441 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-24 07:18:24 -07:00
Joe Li c033806300 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-21 07:10:13 -07:00
Joe Li 744c81fb27 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-20 07:06:34 -07:00
Joe Li 3e69650828 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-19 07:05:20 -07:00
Joe Li 11cabd7f02 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-18 07:17:42 -07:00
Joe Li e1ef4f06cc Merge remote-tracking branch 'origin/master' into HEAD 2026-08-17 07:09:31 -07:00
Joe Li 74a364dc13 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-14 07:05:15 -07:00
Joe Li e4bb1bc825 Merge remote-tracking branch 'origin/master' into HEAD 2026-08-13 07:04:11 -07:00
Joe Li 05938977ab Merge remote-tracking branch 'origin/master' into HEAD 2026-08-12 07:05:21 -07:00
Joe Li 411f25859e Merge remote-tracking branch 'origin/master' into HEAD 2026-08-11 07:04:36 -07:00
Joe Li 8bd06c462c Merge remote-tracking branch 'origin/master' into HEAD 2026-08-10 07:05:32 -07:00
Joe Li fd95e60abd chore: fix spacing in AGENTS.md 2026-08-07 09:02:41 -07:00
13 changed files with 157 additions and 104 deletions
+13
View File
@@ -19,6 +19,19 @@ on:
required: false
type: string
# Triggers on labeled/unlabeled/synchronize/closed -- far more events per PR than
# typical CI's synchronize-only trigger. Without this, every event queues its own
# run and nothing ever supersedes a stale one, so runs pile up indefinitely on
# active PRs (observed: 6 simultaneously queued runs for a single PR) and end up
# starved competing for the same runner pool as everything else. cancel-in-progress
# is correct here, not just a queue-relief hack: this job's whole purpose is
# reconciling to the *current* desired state, so a run still working toward an
# already-superseded state is wasted work regardless of whether it's queued or
# mid-sync.
concurrency:
group: showtime-${{ github.event.pull_request.number || github.event.inputs.pr_number }}
cancel-in-progress: true
# Common environment variables for all jobs (non-sensitive only)
env:
AWS_REGION: us-west-2
+1 -1
View File
@@ -304,7 +304,7 @@ pre-commit run eslint # Frontend linting
## Platform-Specific Instructions
- **[CLAUDE.md](CLAUDE.md)** - For Claude/Anthropic tools
- **[.github/copilot-instructions.md](.github/copilot-instructions.md)** - For GitHub Copilot
- **[.github/copilot-instructions.md](.github/copilot-instructions.md)** - For GitHub Copilot
- **[GEMINI.md](GEMINI.md)** - For Google Gemini tools
- **[GPT.md](GPT.md)** - For OpenAI/ChatGPT tools
- **[.cursor/rules/dev-standard.mdc](.cursor/rules/dev-standard.mdc)** - For Cursor editor
+4 -4
View File
@@ -83,6 +83,10 @@ const disableDevModeInRules = rules =>
};
});
function getAbsolutePath(value) {
return path.dirname(require.resolve(path.join(value, 'package.json')));
}
export default {
stories: [
'../src/**/*.stories.tsx',
@@ -129,7 +133,3 @@ export default {
options: {},
}
};
function getAbsolutePath(value) {
return path.dirname(require.resolve(path.join(value, 'package.json')));
}
+1 -1
View File
@@ -14,7 +14,7 @@
"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.
under the License
-->
# Change Log
+81 -81
View File
@@ -255,7 +255,7 @@
"minimizer-webpack-plugin": "^5.8.0",
"open-cli": "^9.0.0",
"oxfmt": "^0.66.0",
"oxlint": "^1.80.0",
"oxlint": "^1.81.0",
"po2json": "^0.4.5",
"postcss-styled-syntax": "^0.7.2",
"process": "^0.11.10",
@@ -10276,9 +10276,9 @@
}
},
"node_modules/@oxlint/binding-android-arm-eabi": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.80.0.tgz",
"integrity": "sha512-RM3Plj+biQpxa5d1GOOX6ciDlcUROmm4OZ/pLTpitkQt2mJv4jhtY4cbgaetOm5UKWZe05/TGQ6o1Vl8EOHkrA==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.81.0.tgz",
"integrity": "sha512-IcCRsXiedJoJopY6mpZUBEeVFsUrutmrG7dZ87zMuKJlhg70Ora9bBl1WcCxZQtyI10YpnVdEso5oCg7YcfSHw==",
"cpu": [
"arm"
],
@@ -10293,9 +10293,9 @@
}
},
"node_modules/@oxlint/binding-android-arm64": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.80.0.tgz",
"integrity": "sha512-YlO5JEf0Yr2bUUlu8O8daVcUxtcGGbcSmyV7E7nSbJbfAdxTE0PFPwgnIlw7wXJaTYjb+qs5hI5q3jxUkI7cAw==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.81.0.tgz",
"integrity": "sha512-GRrIPyTGVhx3L3h+0T5xT2A0jFAcdPv4+IfuXpGDLIdl6XeYhgg/zw72A5ILZoUgRqZuM8F1y+V/gfDriXSxzQ==",
"cpu": [
"arm64"
],
@@ -10310,9 +10310,9 @@
}
},
"node_modules/@oxlint/binding-darwin-arm64": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.80.0.tgz",
"integrity": "sha512-BULDOyO3AhsmdWfQeIUCykDt3dd7XZBGLhp1eIh56skRv01O+cNjNPwXMIbeW1x4+pxcln5if72wcRgViVo7PA==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.81.0.tgz",
"integrity": "sha512-qNQ9tXRgLuKbqSV1S2h9h4KPHjbovO7RRR2/enUOtHzTkFZ7B9X5zqqHJua8dRyc7dBy7Aoyq5pqTSLFVcAzGQ==",
"cpu": [
"arm64"
],
@@ -10327,9 +10327,9 @@
}
},
"node_modules/@oxlint/binding-darwin-x64": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.80.0.tgz",
"integrity": "sha512-YJ4JzLw7N5TDSQFlA0hAQGHvnDZgyypm1yunObVWcWiF9KM7eGCJKYKLgTC2Fi/57OdnBhbj4OkzPGdFQJ6HyA==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.81.0.tgz",
"integrity": "sha512-q0QTm32jWga2Gv4j7IaVZN0jYMi9UV73sWVgFtDA4iIfqwMCLLZ3ve+9KwfYtsaKZSgQhmPaogeZWqDZpcY1Pw==",
"cpu": [
"x64"
],
@@ -10344,9 +10344,9 @@
}
},
"node_modules/@oxlint/binding-freebsd-x64": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.80.0.tgz",
"integrity": "sha512-AYUIk5QnL0s8oWAYsREZwkRYy1SupJTXALo93J1TgzHywxQtdM99FecRMQ87MXEdPQ0j1TmEpeeq3fGNkpvMqg==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.81.0.tgz",
"integrity": "sha512-/+8wVWDXEC7wHVAhOc59Fw/SkMc1arLkFD8iQCaSsmzenK1X4doFqquL9H1wrtGUzaiycVqkf/sSpcILK6W1UA==",
"cpu": [
"x64"
],
@@ -10361,9 +10361,9 @@
}
},
"node_modules/@oxlint/binding-linux-arm-gnueabihf": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.80.0.tgz",
"integrity": "sha512-9hBZVANupQ89W9dXyE0n8doCyaW5pDyGn3y6XlIMPZ+rIKuyqkr3SNUXmVJIhuvUq0NBU3RBiSXXE69l4XI6KA==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.81.0.tgz",
"integrity": "sha512-4xt422FEgioRq9hAL4Tq7fujGUWnc8z1BJ+Oi8RN8vB8axaP+sdK6a2xdlcQCCYnJg9QMuMFS0AucuIFx/EacA==",
"cpu": [
"arm"
],
@@ -10378,9 +10378,9 @@
}
},
"node_modules/@oxlint/binding-linux-arm-musleabihf": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.80.0.tgz",
"integrity": "sha512-SvS2uKqzY+pbfuvAHzH4338R6Zwo805GAwrIMVvK1KxoOWCIjZUdfzTCvilD7z6JK91v011+zYMryabhDo2AsQ==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.81.0.tgz",
"integrity": "sha512-u3vna8KdGplH4DRCW9K54D68fcMo7IxVrkCJWwXnIhwtBdnDnYrmzOUA/XjmBlPpcLsgw9Z5BNdY4za9+Dj+MQ==",
"cpu": [
"arm"
],
@@ -10395,9 +10395,9 @@
}
},
"node_modules/@oxlint/binding-linux-arm64-gnu": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.80.0.tgz",
"integrity": "sha512-tCLadyqRVL3pQTRPNg7cjXKvcvS4fbyXeQHhKk5BTJ1oftQln5/yIIWbu/Xom/DX41zv2P9QGt6+D/TtQVtY3A==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.81.0.tgz",
"integrity": "sha512-3j9k+gsYsE7nv71GWotXsqsa2l9/aJenD7dVHNt/CBvsb0SgRjSMnHFeP59IXUAl1wvVFhqGl2wJNMwWU3UBlA==",
"cpu": [
"arm64"
],
@@ -10415,9 +10415,9 @@
}
},
"node_modules/@oxlint/binding-linux-arm64-musl": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.80.0.tgz",
"integrity": "sha512-XfpCNRlOPcLlJl4Bn/FUhjqlR6BVavEykERBf/MV7YA9VZDa5g5znVqYhyviMafcxS9Pe/i/kPvHNO0U6svEHQ==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.81.0.tgz",
"integrity": "sha512-k5iAp3dNxW0/uDCBY+WSm8jKB2szu7SkEQZdgRRpDXvuDd69vvDcqhB3A/pWCfCwXyenjNjFn9Td1fVoyAc+Yg==",
"cpu": [
"arm64"
],
@@ -10435,9 +10435,9 @@
}
},
"node_modules/@oxlint/binding-linux-ppc64-gnu": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.80.0.tgz",
"integrity": "sha512-3I4yMwcFG9NeO8ioY6JBBuKsIm5GL/x7MATt1S4tVWaxPu5HcJ+XnLUbcVBTxG8q2Wu56HSj+NmXQiVYb1lp6A==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.81.0.tgz",
"integrity": "sha512-TFqLja3uYmVSte6nof9GWrex9Z8WgdZrNiLC6Te5rXGDqXB2y4j/26iFhwosXiAFqDhE9JJVuuCkDKLwptTn1g==",
"cpu": [
"ppc64"
],
@@ -10455,9 +10455,9 @@
}
},
"node_modules/@oxlint/binding-linux-riscv64-gnu": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.80.0.tgz",
"integrity": "sha512-E1wAKymkpe1/E8helzBKdm81OBOF+ezxRyXRMEuik3ZpWDER5CPOKZwF66RsdwW98uwZv8UTFremUQtC1CzdJA==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.81.0.tgz",
"integrity": "sha512-UEcySvGS0NOVo7h7n7CYyJL9+6gFAh7Zc/ToDXVScFvzHSTIxtzkMVU30rmQ6+nQ1LF+UdiRDdJajpDu+OylLg==",
"cpu": [
"riscv64"
],
@@ -10475,9 +10475,9 @@
}
},
"node_modules/@oxlint/binding-linux-riscv64-musl": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.80.0.tgz",
"integrity": "sha512-+gLRGD4sIo3+VA++iham5UxD9tKSoJ/VOrROCEXIcknrYtQg6iIQgvjN0cpiRF7N6UYC7pJbvHJlDnMge5LRpQ==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.81.0.tgz",
"integrity": "sha512-H+diDbhD00+wI1IRP8Kz88x/lat+DgtoBJzoTthS16xkTJGNaEkfb8gzmd1rzc/2uDQQMl7GNl+JFUacVeWxIA==",
"cpu": [
"riscv64"
],
@@ -10495,9 +10495,9 @@
}
},
"node_modules/@oxlint/binding-linux-s390x-gnu": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.80.0.tgz",
"integrity": "sha512-aR0PrzHj9leW3NmzBAAP4EzdoBNoJcs9sjnIQPIwyRnBGYrRbXUIpEB5Q39AqK3PLY5JK5uEhDQDiUa1QSAstw==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.81.0.tgz",
"integrity": "sha512-8znJ/5TekjOKg1j1Acho4PJMdiAHLtlcXuWEiipOhAMV6rQcXdmDdXCbheyDczN6TjBwiNfjcP81k4AthrKRzw==",
"cpu": [
"s390x"
],
@@ -10515,9 +10515,9 @@
}
},
"node_modules/@oxlint/binding-linux-x64-gnu": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.80.0.tgz",
"integrity": "sha512-vSVh5cSo3Xxs6ghBCcFJlpbkbENzDog1qXtoXLa/HC3aCrR4XO76GZbXmQoCPHnu99nQpdCeC3H9tdNICfDh7A==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.81.0.tgz",
"integrity": "sha512-Q2Wj70yFsvn5QjlmifFzbj4H+kJy53bwqc41o1fzoM7MpLV1NIbhg/LpWXRfC6KOkSAdUx1Wd8VJsdPmhp/HRA==",
"cpu": [
"x64"
],
@@ -10535,9 +10535,9 @@
}
},
"node_modules/@oxlint/binding-linux-x64-musl": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.80.0.tgz",
"integrity": "sha512-FfzBXpNQ8u7/ZI/p8bl73MeZ508Ax3hxWp3SiJpEFiC+BB9XcXy5FAZHTLKDPSzrUpxQZSZJAVdDmuJp/+HDBQ==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.81.0.tgz",
"integrity": "sha512-cPInHp/ddEe5qkyK2IiyQ8Q3Mp2oLLEhhsGgTK2oZx4L6+llGam1H1yBvJZ7qHfOXj8N3hxBS8sj4tO+gtFlIg==",
"cpu": [
"x64"
],
@@ -10555,9 +10555,9 @@
}
},
"node_modules/@oxlint/binding-openharmony-arm64": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.80.0.tgz",
"integrity": "sha512-zMzbkumtmprCgRwoYNzcB3iC39fXdJIMLMU33KdCjEGLlJGOEt1+LwQ4LF8ndLzAEKVz4BR0y3V6Xrkk3Nm3yA==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.81.0.tgz",
"integrity": "sha512-0CQxSX4ajqm07AHBf5U33qQzXKdd7wtq/oTL/7vpY6RNNuxrRi8W4bqUV1Jyu/vj+9KmxQyDhxfeVX1nQL6kfg==",
"cpu": [
"arm64"
],
@@ -10572,9 +10572,9 @@
}
},
"node_modules/@oxlint/binding-win32-arm64-msvc": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.80.0.tgz",
"integrity": "sha512-ib6iRcrXsk4t1fm3iKcwksyWh1ZkZXC/2mEzakl0ai2+6HZunf1WWMZ/xP9EJAvw9g9K4UVTC3NF/+G2qLrbTQ==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.81.0.tgz",
"integrity": "sha512-l0hbeISm9673hVrrQU8j/p2M7YH9Ouoj7p7E/QM55NTrKVLP+P3PF8hLu+OY+x0VtGRW+ggiQKZqmdYps9H+TA==",
"cpu": [
"arm64"
],
@@ -10589,9 +10589,9 @@
}
},
"node_modules/@oxlint/binding-win32-ia32-msvc": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.80.0.tgz",
"integrity": "sha512-xhRWBMpLxZvgKAH6+DJZmpP+W8Y8UdQOSU1JfxSWNXsaBaRGW77j+1hCuNHlzj7OH4SPN8fYd1q0o2qrDtoVyw==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.81.0.tgz",
"integrity": "sha512-ksqPP5jbFXcYreEQ7zdJh06rJQBymCTyGRCdaXjfcf2aG4f8KxUWY5wcgYHmaTK+FJ4bPG5sUAdOX+6trnH1JA==",
"cpu": [
"ia32"
],
@@ -10606,9 +10606,9 @@
}
},
"node_modules/@oxlint/binding-win32-x64-msvc": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.80.0.tgz",
"integrity": "sha512-yAnO7lwBYQnz2pcfBPIGQQZWIX5zd5R/1aAKIF3oE+TVj7IhoHcROjOkz3sRDngzqhfPKfFaXqug5j5rE5dn6Q==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.81.0.tgz",
"integrity": "sha512-IZuUCwGw9emG5JtCp+fYGB+Z4OWEoeEcM8R5BA1pYw63/ieYFVdcU2ylxTpHbVHSenZnsYE+ZZ20uHAJszQ4cA==",
"cpu": [
"x64"
],
@@ -35963,9 +35963,9 @@
}
},
"node_modules/oxlint": {
"version": "1.80.0",
"resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.80.0.tgz",
"integrity": "sha512-5nTiSps4qdbCWLbxzuO00alHkEO2exR9YMN/ig6QXWrLsYSG0KaObOAM+l6oU2LcKPWoSAGYbkZIGEu1ViiWKA==",
"version": "1.81.0",
"resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.81.0.tgz",
"integrity": "sha512-HyrJYqeoOCL0iqaLEzGewGT48ZX99P3hxYh8udAF9RGGIghSamkXE4ClUyBpEDNqasamThgmlPbuMOe7SAZmHg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -35975,28 +35975,28 @@
"node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/sponsors/Boshen"
"url": "https://github.com/sponsors/oxc-project"
},
"optionalDependencies": {
"@oxlint/binding-android-arm-eabi": "1.80.0",
"@oxlint/binding-android-arm64": "1.80.0",
"@oxlint/binding-darwin-arm64": "1.80.0",
"@oxlint/binding-darwin-x64": "1.80.0",
"@oxlint/binding-freebsd-x64": "1.80.0",
"@oxlint/binding-linux-arm-gnueabihf": "1.80.0",
"@oxlint/binding-linux-arm-musleabihf": "1.80.0",
"@oxlint/binding-linux-arm64-gnu": "1.80.0",
"@oxlint/binding-linux-arm64-musl": "1.80.0",
"@oxlint/binding-linux-ppc64-gnu": "1.80.0",
"@oxlint/binding-linux-riscv64-gnu": "1.80.0",
"@oxlint/binding-linux-riscv64-musl": "1.80.0",
"@oxlint/binding-linux-s390x-gnu": "1.80.0",
"@oxlint/binding-linux-x64-gnu": "1.80.0",
"@oxlint/binding-linux-x64-musl": "1.80.0",
"@oxlint/binding-openharmony-arm64": "1.80.0",
"@oxlint/binding-win32-arm64-msvc": "1.80.0",
"@oxlint/binding-win32-ia32-msvc": "1.80.0",
"@oxlint/binding-win32-x64-msvc": "1.80.0"
"@oxlint/binding-android-arm-eabi": "1.81.0",
"@oxlint/binding-android-arm64": "1.81.0",
"@oxlint/binding-darwin-arm64": "1.81.0",
"@oxlint/binding-darwin-x64": "1.81.0",
"@oxlint/binding-freebsd-x64": "1.81.0",
"@oxlint/binding-linux-arm-gnueabihf": "1.81.0",
"@oxlint/binding-linux-arm-musleabihf": "1.81.0",
"@oxlint/binding-linux-arm64-gnu": "1.81.0",
"@oxlint/binding-linux-arm64-musl": "1.81.0",
"@oxlint/binding-linux-ppc64-gnu": "1.81.0",
"@oxlint/binding-linux-riscv64-gnu": "1.81.0",
"@oxlint/binding-linux-riscv64-musl": "1.81.0",
"@oxlint/binding-linux-s390x-gnu": "1.81.0",
"@oxlint/binding-linux-x64-gnu": "1.81.0",
"@oxlint/binding-linux-x64-musl": "1.81.0",
"@oxlint/binding-openharmony-arm64": "1.81.0",
"@oxlint/binding-win32-arm64-msvc": "1.81.0",
"@oxlint/binding-win32-ia32-msvc": "1.81.0",
"@oxlint/binding-win32-x64-msvc": "1.81.0"
},
"peerDependencies": {
"oxlint-tsgolint": ">=7.0.2001",
+1 -1
View File
@@ -332,7 +332,7 @@
"minimizer-webpack-plugin": "^5.8.0",
"open-cli": "^9.0.0",
"oxfmt": "^0.66.0",
"oxlint": "^1.80.0",
"oxlint": "^1.81.0",
"po2json": "^0.4.5",
"postcss-styled-syntax": "^0.7.2",
"process": "^0.11.10",
-14
View File
@@ -23,7 +23,6 @@
"@types/node": "^26.4.1",
"@types/ws": "^8.18.1",
"esbuild": "^0.28.2",
"globals": "^17.11.0",
"oxfmt": "^0.66.0",
"oxlint": "^1.81.0",
"oxlint-tsgolint": "^7.0.2001",
@@ -2406,19 +2405,6 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/globals": {
"version": "17.11.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-17.11.0.tgz",
"integrity": "sha512-Z2I8hM+PbJDXQDq3Icgpzv+mPdwr68iZUU9d5WW4FuXfDUQfkZaZuvjMv42/5crNyw154+9+VWXbYrUgDXbxNw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/hot-shots": {
"version": "17.1.0",
"resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-17.1.0.tgz",
-1
View File
@@ -31,7 +31,6 @@
"@types/node": "^26.4.1",
"@types/ws": "^8.18.1",
"esbuild": "^0.28.2",
"globals": "^17.11.0",
"oxfmt": "^0.66.0",
"oxlint": "^1.81.0",
"oxlint-tsgolint": "^7.0.2001",
+2
View File
@@ -734,6 +734,8 @@ class ChartDataRestApi(ChartRestApi):
return ChartDataQueryContextSchema().load(form_data)
except KeyError as ex:
raise ValidationError("Request is incorrect") from ex
except ValueError as ex:
raise ValidationError(str(ex)) from ex
def _should_use_streaming(
self, result: dict[Any, Any], form_data: dict[str, Any] | None = None
+6 -1
View File
@@ -261,7 +261,7 @@ def masked_encrypted_extra_validator(value: str) -> None:
encrypted_extra_validator(value)
def extra_validator(value: str) -> str:
def extra_validator(value: str) -> str: # noqa: C901
"""
Validate that extra is a valid JSON string, and that metadata_params
keys are on the call signature for SQLAlchemy Metadata
@@ -274,6 +274,11 @@ def extra_validator(value: str) -> str:
[_("Field cannot be decoded by JSON. %(msg)s", msg=str(ex))]
) from ex
if not isinstance(extra_, dict):
raise ValidationError(
[_("Extra field must be a mapping from string keys to values.")]
)
metadata_signature = inspect.signature(MetaData)
for key in extra_.get("metadata_params", {}):
if key not in metadata_signature.parameters:
@@ -383,6 +383,15 @@ class TestPostChartDataApi(BaseTestChartDataApi):
rv = self.post_assert_metric(CHART_DATA_URI, self.query_context_payload, "data")
assert rv.status_code == 400
def test_with_reversed_time_range__400(self):
# A reversed custom date range (since > until) makes get_since_until
# raise a ValueError; the API must convert it to a 400, not a 500.
self.query_context_payload["queries"][0]["time_range"] = (
"2024-01-01T00:00:00 : 2020-01-01T00:00:00"
)
rv = self.post_assert_metric(CHART_DATA_URI, self.query_context_payload, "data")
assert rv.status_code == 400
@pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
def test_with_invalid_payload__400(self):
invalid_query_context = {"form_data": "NOT VALID JSON"}
@@ -1337,3 +1337,23 @@ def test_get_data_route_passes_loaded_chart_to_data_response(
get_data(api, 1)
assert mock_response.call_args.kwargs["slice_"] is chart
def test_create_query_context_from_form_converts_value_error_to_400() -> None:
"""
A ValueError raised while loading the query context (e.g. a reversed date
range where since > until) is re-raised as a marshmallow ValidationError so
the API returns a 400 instead of an unhandled 500.
"""
from marshmallow import ValidationError
api = ChartDataRestApi()
message = "From date cannot be larger than to date"
with patch(
"superset.charts.data.api.ChartDataQueryContextSchema.load",
side_effect=ValueError(message),
):
with pytest.raises(ValidationError) as excinfo:
api._create_query_context_from_form({})
assert message in str(excinfo.value)
@@ -595,6 +595,25 @@ def test_extra_validator_interpolates_json_decode_error() -> None:
assert "%(" not in message
@pytest.mark.parametrize("value", [123, None, [1, 2], True, "abc"])
def test_extra_validator_rejects_non_dict_top_level_value(value: Any) -> None:
"""
Test that extra_validator rejects a top-level extra value that is valid
JSON but not a mapping (int, null, list, bool, string), instead of
letting AttributeError propagate from extra_.get("metadata_params").
"""
from superset.databases.schemas import DatabasePostSchema
schema = DatabasePostSchema()
payload = {
"database_name": "test_db",
"extra": json.dumps(value),
}
with pytest.raises(ValidationError) as exc_info:
schema.load(payload)
assert "must be a mapping" in str(exc_info.value)
def test_cache_timeout_rejects_values_below_minus_one() -> None:
"""
Test that cache_timeout rejects values less than -1.