codeant-ai-for-open-source[bot] commented on code in PR #39894:
URL: https://github.com/apache/superset/pull/39894#discussion_r3456282222


##########
superset-frontend/src/dashboard/actions/datasources.test.ts:
##########
@@ -0,0 +1,105 @@
+/**
+ * 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.
+ */
+import { SupersetClient } from '@superset-ui/core';
+import { RootState } from 'src/dashboard/types';
+import {
+  DatasourcesAction,
+  fetchDatasourceMetadata,
+  setDatasource,
+} from './datasources';
+
+const KEY = '7__table';
+
+const buildGetState =
+  (datasources: Record<string, any> = {}) =>

Review Comment:
   **Suggestion:** Replace `Record<string, any>` with the existing datasource 
state type (for example `DatasourcesState` or `Record<string, Datasource>`) so 
the test state is strongly typed. [custom_rule]
   
   **Severity Level:** Minor ⚠️
   <details>
   <summary><b>Why it matters? 🤔 </b></summary>
   
   The rule forbids added or modified TypeScript code that uses `any`. This 
test helper declares `Record<string, any>`, so the violation is present in the 
current file and the suggestion correctly identifies it.
   </details>
   
   [![Fix in 
Cursor](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-cursor-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=f4ba1d097d13443684feff59ee782d5c&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
 [![Fix in VSCode 
Claude](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-vscode-claude-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=f4ba1d097d13443684feff59ee782d5c&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
   
   *(Use Cmd/Ctrl + Click for best experience)*
   <details>
   <summary><b>Prompt for AI Agent 🤖 </b></summary>
   
   ```mdx
   This is a comment left during a code review.
   
   **Path:** superset-frontend/src/dashboard/actions/datasources.test.ts
   **Line:** 29:30
   **Comment:**
        *Custom Rule: Replace `Record<string, any>` with the existing 
datasource state type (for example `DatasourcesState` or `Record<string, 
Datasource>`) so the test state is strongly typed.
   
   Validate the correctness of the flagged issue. If correct, How can I resolve 
this? If you propose a fix, implement it and please make it concise.
   Once fix is implemented, also check other comments on the same PR, and ask 
user if the user wants to fix the rest of the comments as well. if said yes, 
then fetch all the comments validate the correctness and implement a minimal fix
   ```
   </details>
   <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=a22acccfe8d3faf57c86958a499f51a6124009e643c0ac264ad8600cead9ad44&reaction=like'>👍</a>
 | <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=a22acccfe8d3faf57c86958a499f51a6124009e643c0ac264ad8600cead9ad44&reaction=dislike'>👎</a>



##########
superset-frontend/src/dashboard/actions/datasources.test.ts:
##########
@@ -0,0 +1,105 @@
+/**
+ * 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.
+ */
+import { SupersetClient } from '@superset-ui/core';
+import { RootState } from 'src/dashboard/types';
+import {
+  DatasourcesAction,
+  fetchDatasourceMetadata,
+  setDatasource,
+} from './datasources';
+
+const KEY = '7__table';
+
+const buildGetState =
+  (datasources: Record<string, any> = {}) =>
+  () =>
+    ({ datasources }) as RootState;
+
+afterEach(() => {
+  jest.restoreAllMocks();
+});
+
+test('fetchDatasourceMetadata uses the cached datasource without a network 
call', () => {
+  const getSpy = jest.spyOn(SupersetClient, 'get');
+  const dispatch = jest.fn();
+  const cached = { uid: KEY, main_dttm_col: 'ds' } as any;
+
+  fetchDatasourceMetadata(KEY)(dispatch, buildGetState({ [KEY]: cached }));
+
+  expect(getSpy).not.toHaveBeenCalled();
+  expect(dispatch).toHaveBeenCalledWith(setDatasource(cached, KEY));
+});
+
+test('fetchDatasourceMetadata fetches and caches an uncached datasource', 
async () => {
+  const json = { uid: KEY, main_dttm_col: 'ds' };
+  const getSpy = jest
+    .spyOn(SupersetClient, 'get')
+    .mockResolvedValue({ json } as any);

Review Comment:
   **Suggestion:** Replace the mocked response `as any` cast with the concrete 
Superset client response shape expected by `SupersetClient.get`. [custom_rule]
   
   **Severity Level:** Minor ⚠️
   <details>
   <summary><b>Why it matters? 🤔 </b></summary>
   
   The mocked resolved value is cast to `any`, so this is a direct instance of 
the prohibited pattern in the modified TypeScript file.
   </details>
   
   [![Fix in 
Cursor](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-cursor-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=5209ccdaced342489c2d6866f9080d39&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
 [![Fix in VSCode 
Claude](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-vscode-claude-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=5209ccdaced342489c2d6866f9080d39&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
   
   *(Use Cmd/Ctrl + Click for best experience)*
   <details>
   <summary><b>Prompt for AI Agent 🤖 </b></summary>
   
   ```mdx
   This is a comment left during a code review.
   
   **Path:** superset-frontend/src/dashboard/actions/datasources.test.ts
   **Line:** 51:53
   **Comment:**
        *Custom Rule: Replace the mocked response `as any` cast with the 
concrete Superset client response shape expected by `SupersetClient.get`.
   
   Validate the correctness of the flagged issue. If correct, How can I resolve 
this? If you propose a fix, implement it and please make it concise.
   Once fix is implemented, also check other comments on the same PR, and ask 
user if the user wants to fix the rest of the comments as well. if said yes, 
then fetch all the comments validate the correctness and implement a minimal fix
   ```
   </details>
   <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=4762ce47856f1f7671888c4a7ae27f9aa6f046d6bf4c2399f77a7e12605d6574&reaction=like'>👍</a>
 | <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=4762ce47856f1f7671888c4a7ae27f9aa6f046d6bf4c2399f77a7e12605d6574&reaction=dislike'>👎</a>



##########
superset-frontend/src/dashboard/actions/datasources.test.ts:
##########
@@ -0,0 +1,105 @@
+/**
+ * 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.
+ */
+import { SupersetClient } from '@superset-ui/core';
+import { RootState } from 'src/dashboard/types';
+import {
+  DatasourcesAction,
+  fetchDatasourceMetadata,
+  setDatasource,
+} from './datasources';
+
+const KEY = '7__table';
+
+const buildGetState =
+  (datasources: Record<string, any> = {}) =>
+  () =>
+    ({ datasources }) as RootState;
+
+afterEach(() => {
+  jest.restoreAllMocks();
+});
+
+test('fetchDatasourceMetadata uses the cached datasource without a network 
call', () => {
+  const getSpy = jest.spyOn(SupersetClient, 'get');
+  const dispatch = jest.fn();
+  const cached = { uid: KEY, main_dttm_col: 'ds' } as any;
+
+  fetchDatasourceMetadata(KEY)(dispatch, buildGetState({ [KEY]: cached }));
+
+  expect(getSpy).not.toHaveBeenCalled();
+  expect(dispatch).toHaveBeenCalledWith(setDatasource(cached, KEY));
+});
+
+test('fetchDatasourceMetadata fetches and caches an uncached datasource', 
async () => {
+  const json = { uid: KEY, main_dttm_col: 'ds' };
+  const getSpy = jest
+    .spyOn(SupersetClient, 'get')
+    .mockResolvedValue({ json } as any);
+  const dispatch = jest.fn();
+
+  await fetchDatasourceMetadata(KEY)(dispatch, buildGetState());
+
+  expect(getSpy).toHaveBeenCalledTimes(1);
+  expect(dispatch).toHaveBeenCalledWith(
+    expect.objectContaining({
+      type: DatasourcesAction.SetDatasource,
+      key: KEY,
+      datasource: json,
+    }),
+  );
+});
+
+test('fetchDatasourceMetadata deduplicates concurrent in-flight requests for 
the same key', async () => {
+  let resolveGet: (value: unknown) => void = () => {};
+  const getSpy = jest.spyOn(SupersetClient, 'get').mockReturnValue(
+    new Promise(resolve => {
+      resolveGet = resolve;
+    }) as any,

Review Comment:
   **Suggestion:** Type the mocked in-flight promise return value to the 
expected client response promise type instead of casting the promise to `any`. 
[custom_rule]
   
   **Severity Level:** Minor ⚠️
   <details>
   <summary><b>Why it matters? 🤔 </b></summary>
   
   The mocked promise returned to `mockReturnValue` is cast to `any`, which 
violates the rule against using `any` in changed TypeScript code.
   </details>
   
   [![Fix in 
Cursor](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-cursor-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=2fe76130252947b7baae99d9edf82153&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
 [![Fix in VSCode 
Claude](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-vscode-claude-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=2fe76130252947b7baae99d9edf82153&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
   
   *(Use Cmd/Ctrl + Click for best experience)*
   <details>
   <summary><b>Prompt for AI Agent 🤖 </b></summary>
   
   ```mdx
   This is a comment left during a code review.
   
   **Path:** superset-frontend/src/dashboard/actions/datasources.test.ts
   **Line:** 70:73
   **Comment:**
        *Custom Rule: Type the mocked in-flight promise return value to the 
expected client response promise type instead of casting the promise to `any`.
   
   Validate the correctness of the flagged issue. If correct, How can I resolve 
this? If you propose a fix, implement it and please make it concise.
   Once fix is implemented, also check other comments on the same PR, and ask 
user if the user wants to fix the rest of the comments as well. if said yes, 
then fetch all the comments validate the correctness and implement a minimal fix
   ```
   </details>
   <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=e0f37360596cc5adadc7ca4ce736dbb08ff09fef6f630c017b427ff5c78764dc&reaction=like'>👍</a>
 | <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=e0f37360596cc5adadc7ca4ce736dbb08ff09fef6f630c017b427ff5c78764dc&reaction=dislike'>👎</a>



##########
superset-frontend/src/dashboard/actions/datasources.test.ts:
##########
@@ -0,0 +1,105 @@
+/**
+ * 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.
+ */
+import { SupersetClient } from '@superset-ui/core';
+import { RootState } from 'src/dashboard/types';
+import {
+  DatasourcesAction,
+  fetchDatasourceMetadata,
+  setDatasource,
+} from './datasources';
+
+const KEY = '7__table';
+
+const buildGetState =
+  (datasources: Record<string, any> = {}) =>
+  () =>
+    ({ datasources }) as RootState;
+
+afterEach(() => {
+  jest.restoreAllMocks();
+});
+
+test('fetchDatasourceMetadata uses the cached datasource without a network 
call', () => {
+  const getSpy = jest.spyOn(SupersetClient, 'get');
+  const dispatch = jest.fn();
+  const cached = { uid: KEY, main_dttm_col: 'ds' } as any;

Review Comment:
   **Suggestion:** Remove the `as any` cast on the cached datasource object and 
type it as the dashboard datasource type used by the action creator. 
[custom_rule]
   
   **Severity Level:** Minor ⚠️
   <details>
   <summary><b>Why it matters? 🤔 </b></summary>
   
   The file contains an explicit `as any` cast on the cached datasource 
fixture, which matches the custom rule against `any` in changed TypeScript code.
   </details>
   
   [![Fix in 
Cursor](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-cursor-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=77cc4edeb91b4a968a07b180f9e19656&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
 [![Fix in VSCode 
Claude](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-vscode-claude-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=77cc4edeb91b4a968a07b180f9e19656&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
   
   *(Use Cmd/Ctrl + Click for best experience)*
   <details>
   <summary><b>Prompt for AI Agent 🤖 </b></summary>
   
   ```mdx
   This is a comment left during a code review.
   
   **Path:** superset-frontend/src/dashboard/actions/datasources.test.ts
   **Line:** 41:41
   **Comment:**
        *Custom Rule: Remove the `as any` cast on the cached datasource object 
and type it as the dashboard datasource type used by the action creator.
   
   Validate the correctness of the flagged issue. If correct, How can I resolve 
this? If you propose a fix, implement it and please make it concise.
   Once fix is implemented, also check other comments on the same PR, and ask 
user if the user wants to fix the rest of the comments as well. if said yes, 
then fetch all the comments validate the correctness and implement a minimal fix
   ```
   </details>
   <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=b9c45db13df663437db1fdb3b3fb6639cc5b4808fb99efead70975c6caf68ef1&reaction=like'>👍</a>
 | <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=b9c45db13df663437db1fdb3b3fb6639cc5b4808fb99efead70975c6caf68ef1&reaction=dislike'>👎</a>



##########
superset-frontend/src/dashboard/actions/datasources.test.ts:
##########
@@ -0,0 +1,105 @@
+/**
+ * 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.
+ */
+import { SupersetClient } from '@superset-ui/core';
+import { RootState } from 'src/dashboard/types';
+import {
+  DatasourcesAction,
+  fetchDatasourceMetadata,
+  setDatasource,
+} from './datasources';
+
+const KEY = '7__table';
+
+const buildGetState =
+  (datasources: Record<string, any> = {}) =>
+  () =>
+    ({ datasources }) as RootState;
+
+afterEach(() => {
+  jest.restoreAllMocks();
+});
+
+test('fetchDatasourceMetadata uses the cached datasource without a network 
call', () => {
+  const getSpy = jest.spyOn(SupersetClient, 'get');
+  const dispatch = jest.fn();
+  const cached = { uid: KEY, main_dttm_col: 'ds' } as any;
+
+  fetchDatasourceMetadata(KEY)(dispatch, buildGetState({ [KEY]: cached }));
+
+  expect(getSpy).not.toHaveBeenCalled();
+  expect(dispatch).toHaveBeenCalledWith(setDatasource(cached, KEY));
+});
+
+test('fetchDatasourceMetadata fetches and caches an uncached datasource', 
async () => {
+  const json = { uid: KEY, main_dttm_col: 'ds' };
+  const getSpy = jest
+    .spyOn(SupersetClient, 'get')
+    .mockResolvedValue({ json } as any);
+  const dispatch = jest.fn();
+
+  await fetchDatasourceMetadata(KEY)(dispatch, buildGetState());
+
+  expect(getSpy).toHaveBeenCalledTimes(1);
+  expect(dispatch).toHaveBeenCalledWith(
+    expect.objectContaining({
+      type: DatasourcesAction.SetDatasource,
+      key: KEY,
+      datasource: json,
+    }),
+  );
+});
+
+test('fetchDatasourceMetadata deduplicates concurrent in-flight requests for 
the same key', async () => {
+  let resolveGet: (value: unknown) => void = () => {};
+  const getSpy = jest.spyOn(SupersetClient, 'get').mockReturnValue(
+    new Promise(resolve => {
+      resolveGet = resolve;
+    }) as any,
+  );
+  const dispatch = jest.fn();
+  const getState = buildGetState();
+
+  // Two filters using the same dataset mount and dispatch before the first
+  // request resolves and populates the cache.
+  fetchDatasourceMetadata(KEY)(dispatch, getState);
+  fetchDatasourceMetadata(KEY)(dispatch, getState);
+
+  expect(getSpy).toHaveBeenCalledTimes(1);
+
+  resolveGet({ json: { uid: KEY, main_dttm_col: 'ds' } });
+  await Promise.resolve();
+});
+
+test('fetchDatasourceMetadata clears the in-flight key after a failed request 
so it can retry', async () => {
+  const getSpy = jest
+    .spyOn(SupersetClient, 'get')
+    .mockRejectedValueOnce(new Error('boom'))
+    .mockResolvedValueOnce({ json: { uid: KEY } } as any);

Review Comment:
   **Suggestion:** Remove the `as any` cast from the retry mock and provide a 
properly typed resolved response payload. [custom_rule]
   
   **Severity Level:** Minor ⚠️
   <details>
   <summary><b>Why it matters? 🤔 </b></summary>
   
   This retry-path mock uses `as any`, so it is also a real violation of the 
TypeScript `any` rule in the edited file.
   </details>
   
   [![Fix in 
Cursor](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-cursor-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=0c2e8d67e14c4ab4a8ebefd366327d42&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
 [![Fix in VSCode 
Claude](https://new-codeant-butcket.s3.us-west-1.amazonaws.com/badges/fix-in-vscode-claude-flat.svg)](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=0c2e8d67e14c4ab4a8ebefd366327d42&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
   
   *(Use Cmd/Ctrl + Click for best experience)*
   <details>
   <summary><b>Prompt for AI Agent 🤖 </b></summary>
   
   ```mdx
   This is a comment left during a code review.
   
   **Path:** superset-frontend/src/dashboard/actions/datasources.test.ts
   **Line:** 90:93
   **Comment:**
        *Custom Rule: Remove the `as any` cast from the retry mock and provide 
a properly typed resolved response payload.
   
   Validate the correctness of the flagged issue. If correct, How can I resolve 
this? If you propose a fix, implement it and please make it concise.
   Once fix is implemented, also check other comments on the same PR, and ask 
user if the user wants to fix the rest of the comments as well. if said yes, 
then fetch all the comments validate the correctness and implement a minimal fix
   ```
   </details>
   <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=ac4020a606e6dccb4a1f02126932bcfe5e6e4de928d30dc441f92e04153a91b6&reaction=like'>👍</a>
 | <a 
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39894&comment_hash=ac4020a606e6dccb4a1f02126932bcfe5e6e4de928d30dc441f92e04153a91b6&reaction=dislike'>👎</a>



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to