Skip to content

Mark Snowflake connection form Proxy Port field optional#65444

Open
nikhilcss97 wants to merge 2 commits intoapache:mainfrom
nikhilcss97:fix/snowflake-proxy-port-optional
Open

Mark Snowflake connection form Proxy Port field optional#65444
nikhilcss97 wants to merge 2 commits intoapache:mainfrom
nikhilcss97:fix/snowflake-proxy-port-optional

Conversation

@nikhilcss97
Copy link
Copy Markdown

Summary

Fixes a silent Save failure on the Snowflake connection form in the Airflow
web UI when the Proxy Port field is left blank.

SnowflakeHook.get_connection_form_widgets currently declares the field as:

"proxy_port": IntegerField(lazy_gettext("Proxy Port")),

IntegerField without Optional() fails WTForms validation on empty input
because an empty string cannot be coerced to int. FAB then silently
re-renders the form without persisting any changes, so the Save button
appears to do nothing when the optional proxy fields are not filled in.

Meanwhile the runtime (SnowflakeHook._get_conn_params) already treats
proxy_port as optional and only applies it when truthy, and every non-UI
path (CLI, env-vars, REST API, secrets backends) accepts an absent
proxy_port. The UI was the only code path enforcing it, and unintentionally.

Fix

Add validators=[Optional()] to the proxy_port widget so WTForms
short-circuits validation for empty input. Also attach BS3TextFieldWidget()
to match the style of the other proxy widgets.

from wtforms.validators import Optional

"proxy_port": IntegerField(
    lazy_gettext("Proxy Port"),
    widget=BS3TextFieldWidget(),
    validators=[Optional()],
),

Tests

Added test_get_connection_form_widgets_proxy_port_is_optional in
providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py covering:

  • Optional() is present in the proxy_port field validators
  • a bound form validates with proxy_port="" and coerces to None
  • a bound form validates with proxy_port="8080" and coerces to 8080
  • a bound form does not validate with a non-integer value, so integer
    type-checking is preserved

Reproduction (pre-fix)

  1. Install Airflow 2.11.x with apache-airflow-providers-snowflake>=6.9.0.
  2. In the UI: Admin → Connections → Add a new record, choose
    Snowflake, fill in the required fields, leave the four Proxy fields
    blank.
  3. Click Save. The form re-renders with no flash message; the
    connection is not created.
  4. Re-enter any integer (e.g. 0) in Proxy Port and click Save. The
    connection is created.

Post-fix: step 3 succeeds, and step 4 is no longer necessary.

Scope and safety

  • Behavior-only change to the FAB/WTForms widget layer. Runtime hook
    behavior is unchanged because _get_conn_params already guards on
    if proxy_port:.
  • No accepted input is narrowed: non-UI paths already accepted empty
    proxy_port; this aligns the UI with them.
  • Integer type-checking for non-empty input is preserved via the negative
    test case.

Related

closes: #65443


Was generative AI tooling used to co-author this PR?
  • Yes (Claude Sonnet)

Generated-by: Claude Sonnet following the guidelines


  • Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
  • For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
  • When adding dependency, check compliance with the ASF 3rd Party License Policy.
  • For significant user-facing changes create newsfragment: {pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.
Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

  • Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
  • For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
  • When adding dependency, check compliance with the ASF 3rd Party License Policy.
  • For significant user-facing changes create newsfragment: {pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.

@nikhilcss97 nikhilcss97 requested a review from potiuk as a code owner April 17, 2026 21:04
@boring-cyborg
Copy link
Copy Markdown

boring-cyborg bot commented Apr 17, 2026

Congratulations on your first Pull Request and welcome to the Apache Airflow community! If you have any issues or are unsure about any anything please check our Contributors' Guide
Here are some useful points:

  • Pay attention to the quality of your code (ruff, mypy and type annotations). Our prek-hooks will help you with that.
  • In case of a new feature add useful documentation (in docstrings or in docs/ directory). Adding a new operator? Check this short guide Consider adding an example DAG that shows how users should use it.
  • Consider using Breeze environment for testing locally, it's a heavy docker but it ships with a working Airflow and a lot of integrations.
  • Be patient and persistent. It might take some time to get a review or get the final approval from Committers.
  • Please follow ASF Code of Conduct for all communication including (but not limited to) comments on Pull Requests, Mailing list and Slack.
  • Be sure to read the Airflow Coding style.
  • Always keep your Pull Requests rebased, otherwise your build might fail due to changes not related to your commits.
    Apache Airflow is a community-driven project and together we are making it better 🚀.
    In case of doubts contact the developers at:
    Mailing List: [email protected]
    Slack: https://s.apache.org/airflow-slack

@boring-cyborg boring-cyborg bot added area:providers provider:snowflake Issues related to Snowflake provider labels Apr 17, 2026
Copy link
Copy Markdown
Member

@potiuk potiuk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pending CI passes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providers provider:snowflake Issues related to Snowflake provider

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[snowflake] Proxy Port IntegerField silently blocks Snowflake connection form save when left blank

2 participants