codeant-ai-for-open-source[bot] commented on code in PR #36880:
URL: https://github.com/apache/superset/pull/36880#discussion_r3194585427
##########
superset/commands/database/validate.py:
##########
@@ -42,14 +47,16 @@ def __init__(self, properties: dict[str, Any]):
self._properties = properties.copy()
self._model: Optional[Database] = None
- def run(self) -> None:
+ def run(self) -> None: # noqa: C901
self.validate()
engine = self._properties["engine"]
driver = self._properties.get("driver")
if engine in BYPASS_VALIDATION_ENGINES:
# Skip engines that are only validated onCreate
+ # But still validate database_name uniqueness
+ self._validate_database_name()
return
Review Comment:
**Suggestion:** For bypass engines this early return skips
`_get_ssh_tunnel_errors()`, so incomplete SSH tunnel payloads won't be surfaced
during validation for those engines. This breaks the progressive validation
flow and delays SSH errors until later operations. [logic error]
<details>
<summary><b>Severity Level:</b> Major ⚠️</summary>
```mdx
- ⚠️ Snowflake SSH misconfigurations bypass validate_parameters SSH field
checks.
- ⚠️ Users see SSH errors only at create time, not earlier.
```
</details>
<details>
<summary><b>Steps of Reproduction ✅ </b></summary>
```mdx
1. Use the database connection wizard to configure a Snowflake database
(engine
`"snowflake"`) so that the frontend calls `POST
/api/v1/database/validate_parameters`
implemented in `superset/databases/api.py:1980-27` with `payload["engine"] ==
"snowflake"`.
2. Include partial SSH configuration in the payload, for example:
- `"parameters": {"host": "...", "port": 443, "username": "u",
"database": "d", "ssh":
true}`
- `"ssh_tunnel": {"server_address": "ssh.example.com"}` (missing
`server_port`,
`username`, and credentials), which is accepted by
`DatabaseValidateParametersSchema`
(`superset/databases/schemas.py:392-55`) because
`DatabaseSSHTunnelValidation` permits
optional SSH fields.
3. The API constructs `ValidateDatabaseParametersCommand` and calls `run()`
(`superset/commands/database/validate.py:50-88`); since `engine` is
`"snowflake"` and
`"snowflake"` is listed in `BYPASS_VALIDATION_ENGINES` at `line 42`, the
branch at `lines
56-60` executes: it calls `_validate_database_name()` and returns early,
skipping both
`engine_spec.validate_parameters(...)` and `_get_ssh_tunnel_errors()`.
4. Because `_get_ssh_tunnel_errors()`
(`superset/commands/database/validate.py:202-254`)
is never called for these bypass engines, the response from
`/api/v1/database/validate_parameters` is `200 OK` with no SSH-related
errors, even though
`server_port`, `username`, and credentials are missing; users only discover
SSH tunnel
misconfigurations later when hitting the create/test-connection paths
governed by
`DatabasePostSchema` and `DatabaseSSHTunnel.validate_authentication`
(`superset/databases/schemas.py:460-39`), defeating the intended progressive
validation
behavior for Snowflake connections.
```
</details>
[Fix in
Cursor](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt=This%20is%20a%20comment%20left%20during%20a%20code%20review.%0A%0A%2A%2APath%3A%2A%2A%20superset%2Fcommands%2Fdatabase%2Fvalidate.py%0A%2A%2ALine%3A%2A%2A%2056%3A60%0A%2A%2AComment%3A%2A%2A%0A%09%2ALogic%20Error%3A%20For%20bypass%20engines%20this%20early%20return%20skips%20%60_get_ssh_tunnel_errors%28%29%60%2C%20so%20incomplete%20SSH%20tunnel%20payloads%20won%27t%20be%20surfaced%20during%20validation%20for%20those%20engines.%20This%20breaks%20the%20progressive%20validation%20flow%20and%20delays%20SSH%20errors%20until%20later%20operations.%0A%0AValidate%20the%20correctness%20of%20the%20flagged%20issue.%20If%20correct%2C%20How%20can%20I%20resolve%20this%3F%20If%20you%20propose%20a%20fix%2C%20implement%20it%20and%20please%20make%20it%20concise.%0AOnce%20fix%20is%20implemented%2C%20also%20check%20other%20comments%20on%20the%20same%20PR%2C%20and%20ask%20user%20if%20the%20user%20wants%20to%20fix%20the%20rest%20of%20the
%20comments%20as%20well.%20if%20said%20yes%2C%20then%20fetch%20all%20the%20comments%20validate%20the%20correctness%20and%20implement%20a%20minimal%20fix%0A)
| [Fix in VSCode
Claude](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt=This%20is%20a%20comment%20left%20during%20a%20code%20review.%0A%0A%2A%2APath%3A%2A%2A%20superset%2Fcommands%2Fdatabase%2Fvalidate.py%0A%2A%2ALine%3A%2A%2A%2056%3A60%0A%2A%2AComment%3A%2A%2A%0A%09%2ALogic%20Error%3A%20For%20bypass%20engines%20this%20early%20return%20skips%20%60_get_ssh_tunnel_errors%28%29%60%2C%20so%20incomplete%20SSH%20tunnel%20payloads%20won%27t%20be%20surfaced%20during%20validation%20for%20those%20engines.%20This%20breaks%20the%20progressive%20validation%20flow%20and%20delays%20SSH%20errors%20until%20later%20operations.%0A%0AValidate%20the%20correctness%20of%20the%20flagged%20issue.%20If%20correct%2C%20How%20can%20I%20resolve%20this%3F%20If%20you%20propose%20a%20fix%2C%20implement%20it%20and%20please%20make%20it%20concise.%0AO
nce%20fix%20is%20implemented%2C%20also%20check%20other%20comments%20on%20the%20same%20PR%2C%20and%20ask%20user%20if%20the%20user%20wants%20to%20fix%20the%20rest%20of%20the%20comments%20as%20well.%20if%20said%20yes%2C%20then%20fetch%20all%20the%20comments%20validate%20the%20correctness%20and%20implement%20a%20minimal%20fix%0A)
*(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/commands/database/validate.py
**Line:** 56:60
**Comment:**
*Logic Error: For bypass engines this early return skips
`_get_ssh_tunnel_errors()`, so incomplete SSH tunnel payloads won't be surfaced
during validation for those engines. This breaks the progressive validation
flow and delays SSH errors until later operations.
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%2F36880&comment_hash=7983f22b5429d7c54acceec4e129dbfd8357ed6fa73d62a8335277ff11ef6de1&reaction=like'>👍</a>
| <a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F36880&comment_hash=7983f22b5429d7c54acceec4e129dbfd8357ed6fa73d62a8335277ff11ef6de1&reaction=dislike'>👎</a>
##########
superset/commands/database/validate.py:
##########
@@ -138,6 +154,101 @@ def run(self) -> None:
),
)
- def validate(self) -> None:
+ def _load_model(self) -> None:
+ """Load the existing database model if updating."""
if (database_id := self._properties.get("id")) is not None:
self._model = DatabaseDAO.find_by_id(database_id)
+
+ def _get_database_name_error(self) -> Optional[SupersetError]:
+ """Check for duplicate database name and return error if found."""
+ database_id = self._properties.get("id")
+
+ if database_name := self._properties.get("database_name"):
+ is_unique = (
+ DatabaseDAO.validate_update_uniqueness(database_id,
database_name)
+ if database_id is not None
+ else DatabaseDAO.validate_uniqueness(database_name)
+ )
+ if not is_unique:
+ return SupersetError(
+ message=__("A database with the same name already
exists."),
+ error_type=SupersetErrorType.INVALID_PAYLOAD_SCHEMA_ERROR,
+ level=ErrorLevel.ERROR,
+ extra={"invalid": ["database_name"]},
+ )
+ return None
+
+ def _validate_database_name(self) -> None:
+ """Check for duplicate database name and raise if found."""
+ if error := self._get_database_name_error():
+ raise InvalidParametersError([error])
+
+ def validate(self) -> None:
+ """Load the model and validate SSH tunnel if enabled."""
+ self._load_model()
+ self._validate_ssh_tunnel()
+
+ def _validate_ssh_tunnel(self) -> None:
+ """Validate SSH tunnel configuration if enabled."""
+ ssh_tunnel = self._properties.get("ssh_tunnel")
+ if ssh_tunnel:
+ if not is_feature_enabled("SSH_TUNNELING"):
+ raise SSHTunnelingNotEnabledError()
+ # Check if port is provided (required for SSH tunneling)
+ parameters = self._properties.get("parameters", {})
+ if not parameters.get("port"):
+ raise SSHTunnelDatabasePortError()
+
+ def _get_ssh_tunnel_errors(self) -> list[SupersetError]:
+ """Validate SSH tunnel fields and return list of errors."""
+ errors: list[SupersetError] = []
+ ssh_tunnel = self._properties.get("ssh_tunnel") or {}
+ parameters = self._properties.get("parameters", {})
+
+ # Check if SSH is enabled via parameters.ssh flag
+ ssh_enabled = parameters.get("ssh", False)
+
+ # Only validate SSH tunnel if SSH is enabled or ssh_tunnel is provided
+ if not ssh_enabled and not ssh_tunnel:
+ return errors
+
+ # Required fields
+ required_fields = ["server_address", "server_port", "username"]
+ missing = [f for f in required_fields if not ssh_tunnel.get(f)]
+
+ if missing:
+ errors.append(
+ SupersetError(
+ message=__("One or more parameters are missing:
%(missing)s"),
Review Comment:
**Suggestion:** This translated message includes a `%(missing)s` placeholder
but never passes the `missing` value into `gettext`, so the response message
will contain the raw placeholder text instead of actual missing fields.
Interpolate the placeholder with the computed list/string of missing fields.
[possible bug]
<details>
<summary><b>Severity Level:</b> Major ⚠️</summary>
```mdx
- ⚠️ SSH tunnel validation message hides which fields are missing.
- ⚠️ Users see untranslated placeholder instead of concrete guidance.
```
</details>
<details>
<summary><b>Steps of Reproduction ✅ </b></summary>
```mdx
1. Run the SSH tunnel validation unit test
`test_get_ssh_tunnel_errors_missing_required_fields` in
`superset/tests/unit_tests/commands/databases/validate_test.py:45-88`, which
constructs
`ValidateDatabaseParametersCommand` with `engine="postgresql"`, valid DB
`parameters`, and
an `ssh_tunnel` missing `server_port`, `username`, and all credentials.
2. In `ValidateDatabaseParametersCommand.run()`
(`superset/commands/database/validate.py:50-88`),
`get_engine_spec(...).validate_parameters(...)` is mocked to return `[]`, so
only
`_get_ssh_tunnel_errors()` (`lines 202-254`) produces errors by computing
`missing =
["server_port", "username"]` at `lines 215-218`.
3. `_get_ssh_tunnel_errors()` appends a `SupersetError` at `lines 220-226`
with
`extra={"missing": missing, "ssh_tunnel": True}` but sets `message=__("One
or more
parameters are missing: %(missing)s")` at `line 222` without passing the
`missing` list
into `gettext`, so Flask-Babel returns the untranslated template string with
the
`%(missing)s` placeholder intact.
4. When this error is propagated back through the
`/api/v1/database/validate_parameters`
endpoint (`superset/databases/api.py:1980-27`), any client or UI that renders
`SupersetError.message` will display `"One or more parameters are missing:
%(missing)s"`
instead of listing the actual missing fields, even though
`err.extra["missing"]` holds the
correct list.
```
</details>
[Fix in
Cursor](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt=This%20is%20a%20comment%20left%20during%20a%20code%20review.%0A%0A%2A%2APath%3A%2A%2A%20superset%2Fcommands%2Fdatabase%2Fvalidate.py%0A%2A%2ALine%3A%2A%2A%20222%3A222%0A%2A%2AComment%3A%2A%2A%0A%09%2APossible%20Bug%3A%20This%20translated%20message%20includes%20a%20%60%25%28missing%29s%60%20placeholder%20but%20never%20passes%20the%20%60missing%60%20value%20into%20%60gettext%60%2C%20so%20the%20response%20message%20will%20contain%20the%20raw%20placeholder%20text%20instead%20of%20actual%20missing%20fields.%20Interpolate%20the%20placeholder%20with%20the%20computed%20list%2Fstring%20of%20missing%20fields.%0A%0AValidate%20the%20correctness%20of%20the%20flagged%20issue.%20If%20correct%2C%20How%20can%20I%20resolve%20this%3F%20If%20you%20propose%20a%20fix%2C%20implement%20it%20and%20please%20make%20it%20concise.%0AOnce%20fix%20is%20implemented%2C%20also%20check%20other%20comments%20on%20the%20same%20PR%2C%20and%20ask%20use
r%20if%20the%20user%20wants%20to%20fix%20the%20rest%20of%20the%20comments%20as%20well.%20if%20said%20yes%2C%20then%20fetch%20all%20the%20comments%20validate%20the%20correctness%20and%20implement%20a%20minimal%20fix%0A)
| [Fix in VSCode
Claude](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt=This%20is%20a%20comment%20left%20during%20a%20code%20review.%0A%0A%2A%2APath%3A%2A%2A%20superset%2Fcommands%2Fdatabase%2Fvalidate.py%0A%2A%2ALine%3A%2A%2A%20222%3A222%0A%2A%2AComment%3A%2A%2A%0A%09%2APossible%20Bug%3A%20This%20translated%20message%20includes%20a%20%60%25%28missing%29s%60%20placeholder%20but%20never%20passes%20the%20%60missing%60%20value%20into%20%60gettext%60%2C%20so%20the%20response%20message%20will%20contain%20the%20raw%20placeholder%20text%20instead%20of%20actual%20missing%20fields.%20Interpolate%20the%20placeholder%20with%20the%20computed%20list%2Fstring%20of%20missing%20fields.%0A%0AValidate%20the%20correctness%20of%20the%20flagged%20issue.%20If%20correct%2C%20Ho
w%20can%20I%20resolve%20this%3F%20If%20you%20propose%20a%20fix%2C%20implement%20it%20and%20please%20make%20it%20concise.%0AOnce%20fix%20is%20implemented%2C%20also%20check%20other%20comments%20on%20the%20same%20PR%2C%20and%20ask%20user%20if%20the%20user%20wants%20to%20fix%20the%20rest%20of%20the%20comments%20as%20well.%20if%20said%20yes%2C%20then%20fetch%20all%20the%20comments%20validate%20the%20correctness%20and%20implement%20a%20minimal%20fix%0A)
*(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/commands/database/validate.py
**Line:** 222:222
**Comment:**
*Possible Bug: This translated message includes a `%(missing)s`
placeholder but never passes the `missing` value into `gettext`, so the
response message will contain the raw placeholder text instead of actual
missing fields. Interpolate the placeholder with the computed list/string of
missing fields.
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%2F36880&comment_hash=7528ff12172313a46ed716f084849508ff485a12f1b8fdcc360e4c86870fc4e6&reaction=like'>👍</a>
| <a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F36880&comment_hash=7528ff12172313a46ed716f084849508ff485a12f1b8fdcc360e4c86870fc4e6&reaction=dislike'>👎</a>
##########
superset/commands/database/validate.py:
##########
@@ -138,6 +154,101 @@ def run(self) -> None:
),
)
- def validate(self) -> None:
+ def _load_model(self) -> None:
+ """Load the existing database model if updating."""
if (database_id := self._properties.get("id")) is not None:
self._model = DatabaseDAO.find_by_id(database_id)
+
+ def _get_database_name_error(self) -> Optional[SupersetError]:
+ """Check for duplicate database name and return error if found."""
+ database_id = self._properties.get("id")
+
+ if database_name := self._properties.get("database_name"):
+ is_unique = (
+ DatabaseDAO.validate_update_uniqueness(database_id,
database_name)
+ if database_id is not None
+ else DatabaseDAO.validate_uniqueness(database_name)
+ )
+ if not is_unique:
+ return SupersetError(
+ message=__("A database with the same name already
exists."),
+ error_type=SupersetErrorType.INVALID_PAYLOAD_SCHEMA_ERROR,
+ level=ErrorLevel.ERROR,
+ extra={"invalid": ["database_name"]},
+ )
+ return None
+
+ def _validate_database_name(self) -> None:
+ """Check for duplicate database name and raise if found."""
+ if error := self._get_database_name_error():
+ raise InvalidParametersError([error])
+
+ def validate(self) -> None:
+ """Load the model and validate SSH tunnel if enabled."""
+ self._load_model()
+ self._validate_ssh_tunnel()
+
+ def _validate_ssh_tunnel(self) -> None:
+ """Validate SSH tunnel configuration if enabled."""
+ ssh_tunnel = self._properties.get("ssh_tunnel")
+ if ssh_tunnel:
+ if not is_feature_enabled("SSH_TUNNELING"):
+ raise SSHTunnelingNotEnabledError()
Review Comment:
**Suggestion:** The SSH feature-flag guard only runs when `ssh_tunnel` is
truthy, but the UI enables SSH via `parameters.ssh` and can send an empty
tunnel object during progressive validation. In that case, SSH can be treated
as enabled without triggering `SSHTunnelingNotEnabledError`, producing
incorrect validation behavior. Check the SSH-enabled flag as well when
enforcing feature availability. [logic error]
<details>
<summary><b>Severity Level:</b> Major ⚠️</summary>
```mdx
- ⚠️ /api/v1/database/validate_parameters skips SSH_TUNNELING feature check.
- ⚠️ Users see field errors instead of feature-disabled message.
```
</details>
<details>
<summary><b>Steps of Reproduction ✅ </b></summary>
```mdx
1. Start Superset with the SSH_TUNNELING feature flag disabled (default
`False` in
`superset/config.py:672`), so SSH tunneling is not allowed.
2. Call the validation endpoint `POST /api/v1/database/validate_parameters`
implemented in
`superset/databases/api.py:1980-27`, sending a JSON payload loaded by
`DatabaseValidateParametersSchema` (`superset/databases/schemas.py:392-55`)
with:
- `"engine": "postgresql"` (or another non-bypass engine)
- `"parameters": {"host": "...", "port": 5432, "username": "u",
"database": "d", "ssh":
true}`
- `"ssh_tunnel": {}` (empty object or omitted)
3. The API constructs `ValidateDatabaseParametersCommand` and calls `run()`
(`superset/commands/database/validate.py:45-88`), which calls `validate()`
(`line 186`)
and then `_validate_ssh_tunnel()` (`lines 191-200`); because `ssh_tunnel` is
an empty
dict, `if ssh_tunnel:` at `line 194` is false, so the feature-flag guard
(`is_feature_enabled("SSH_TUNNELING")` and `SSHTunnelingNotEnabledError`) is
never
triggered.
4. Execution continues to `_get_ssh_tunnel_errors()`
(`superset/commands/database/validate.py:202-254`), where
`parameters.get("ssh", False)`
at `line 209` is `True` and `ssh_tunnel` is `{}`, so SSH validation runs and
returns only
`CONNECTION_MISSING_PARAMETERS_ERROR` SupersetErrors; the response from
`/api/v1/database/validate_parameters` therefore reports missing SSH fields
but never
surfaces `SSHTunnelingNotEnabledError`, even though SSH is effectively
enabled via
`parameters["ssh"]` while the feature flag is off.
```
</details>
[Fix in
Cursor](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt=This%20is%20a%20comment%20left%20during%20a%20code%20review.%0A%0A%2A%2APath%3A%2A%2A%20superset%2Fcommands%2Fdatabase%2Fvalidate.py%0A%2A%2ALine%3A%2A%2A%20193%3A196%0A%2A%2AComment%3A%2A%2A%0A%09%2ALogic%20Error%3A%20The%20SSH%20feature-flag%20guard%20only%20runs%20when%20%60ssh_tunnel%60%20is%20truthy%2C%20but%20the%20UI%20enables%20SSH%20via%20%60parameters.ssh%60%20and%20can%20send%20an%20empty%20tunnel%20object%20during%20progressive%20validation.%20In%20that%20case%2C%20SSH%20can%20be%20treated%20as%20enabled%20without%20triggering%20%60SSHTunnelingNotEnabledError%60%2C%20producing%20incorrect%20validation%20behavior.%20Check%20the%20SSH-enabled%20flag%20as%20well%20when%20enforcing%20feature%20availability.%0A%0AValidate%20the%20correctness%20of%20the%20flagged%20issue.%20If%20correct%2C%20How%20can%20I%20resolve%20this%3F%20If%20you%20propose%20a%20fix%2C%20implement%20it%20and%20please%20make%20it%20con
cise.%0AOnce%20fix%20is%20implemented%2C%20also%20check%20other%20comments%20on%20the%20same%20PR%2C%20and%20ask%20user%20if%20the%20user%20wants%20to%20fix%20the%20rest%20of%20the%20comments%20as%20well.%20if%20said%20yes%2C%20then%20fetch%20all%20the%20comments%20validate%20the%20correctness%20and%20implement%20a%20minimal%20fix%0A)
| [Fix in VSCode
Claude](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt=This%20is%20a%20comment%20left%20during%20a%20code%20review.%0A%0A%2A%2APath%3A%2A%2A%20superset%2Fcommands%2Fdatabase%2Fvalidate.py%0A%2A%2ALine%3A%2A%2A%20193%3A196%0A%2A%2AComment%3A%2A%2A%0A%09%2ALogic%20Error%3A%20The%20SSH%20feature-flag%20guard%20only%20runs%20when%20%60ssh_tunnel%60%20is%20truthy%2C%20but%20the%20UI%20enables%20SSH%20via%20%60parameters.ssh%60%20and%20can%20send%20an%20empty%20tunnel%20object%20during%20progressive%20validation.%20In%20that%20case%2C%20SSH%20can%20be%20treated%20as%20enabled%20without%20triggering%20%60SSHTunnelingNotEnabledErr
or%60%2C%20producing%20incorrect%20validation%20behavior.%20Check%20the%20SSH-enabled%20flag%20as%20well%20when%20enforcing%20feature%20availability.%0A%0AValidate%20the%20correctness%20of%20the%20flagged%20issue.%20If%20correct%2C%20How%20can%20I%20resolve%20this%3F%20If%20you%20propose%20a%20fix%2C%20implement%20it%20and%20please%20make%20it%20concise.%0AOnce%20fix%20is%20implemented%2C%20also%20check%20other%20comments%20on%20the%20same%20PR%2C%20and%20ask%20user%20if%20the%20user%20wants%20to%20fix%20the%20rest%20of%20the%20comments%20as%20well.%20if%20said%20yes%2C%20then%20fetch%20all%20the%20comments%20validate%20the%20correctness%20and%20implement%20a%20minimal%20fix%0A)
*(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/commands/database/validate.py
**Line:** 193:196
**Comment:**
*Logic Error: The SSH feature-flag guard only runs when `ssh_tunnel` is
truthy, but the UI enables SSH via `parameters.ssh` and can send an empty
tunnel object during progressive validation. In that case, SSH can be treated
as enabled without triggering `SSHTunnelingNotEnabledError`, producing
incorrect validation behavior. Check the SSH-enabled flag as well when
enforcing feature availability.
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%2F36880&comment_hash=1dd38e6d183a6d621353a7d0600c26a5cea7f7dbf04921e0830ab687c5c3e4bf&reaction=like'>👍</a>
| <a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F36880&comment_hash=1dd38e6d183a6d621353a7d0600c26a5cea7f7dbf04921e0830ab687c5c3e4bf&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]