This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 9f16a7409c0 Lazy load `snowflake` imports in Snowflake provider. 
(#62365)
9f16a7409c0 is described below

commit 9f16a7409c0d7beb3a0655c9b0432c2d112f7b21
Author: Daniel Reeves <[email protected]>
AuthorDate: Tue Mar 3 17:10:34 2026 -0500

    Lazy load `snowflake` imports in Snowflake provider. (#62365)
---
 .../src/airflow/providers/snowflake/hooks/snowflake.py    | 15 +++++++++++----
 .../tests/unit/snowflake/hooks/test_snowflake.py          | 10 +++++-----
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git 
a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py 
b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
index a71ac283646..6d14c24f1c0 100644
--- a/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
+++ b/providers/snowflake/src/airflow/providers/snowflake/hooks/snowflake.py
@@ -34,9 +34,6 @@ from cryptography.hazmat.backends import default_backend
 from cryptography.hazmat.primitives import serialization
 from requests.auth import HTTPBasicAuth
 from requests.exceptions import ConnectionError, HTTPError, Timeout
-from snowflake import connector
-from snowflake.connector import DictCursor, SnowflakeConnection, util_text
-from snowflake.sqlalchemy import URL
 from sqlalchemy import create_engine
 
 from airflow.providers.common.compat.sdk import (
@@ -57,6 +54,8 @@ T = TypeVar("T")
 
 
 if TYPE_CHECKING:
+    from snowflake.connector import SnowflakeConnection
+
     from airflow.providers.openlineage.extractors import OperatorLineage
     from airflow.providers.openlineage.sqlparser import DatabaseInfo
 
@@ -583,6 +582,8 @@ class SnowflakeHook(DbApiHook):
         return self._conn_params_to_sqlalchemy_uri(conn_params)
 
     def _conn_params_to_sqlalchemy_uri(self, conn_params: dict) -> str:
+        from snowflake.sqlalchemy import URL
+
         return URL(
             **{
                 k: v
@@ -607,8 +608,10 @@ class SnowflakeHook(DbApiHook):
 
     def get_conn(self) -> SnowflakeConnection:
         """Return a snowflake.connection object."""
+        from snowflake.connector import connect
+
         conn_config = self._get_conn_params()
-        conn = connector.connect(**conn_config)
+        conn = connect(**conn_config)
         return conn
 
     def get_sqlalchemy_engine(self, engine_kwargs=None):
@@ -722,6 +725,8 @@ class SnowflakeHook(DbApiHook):
         :return: Result of the last SQL statement if *handler* is set.
             *None* otherwise.
         """
+        from snowflake.connector import util_text
+
         self.query_ids = []
 
         if isinstance(sql, str):
@@ -776,6 +781,8 @@ class SnowflakeHook(DbApiHook):
 
     @contextmanager
     def _get_cursor(self, conn: Any, return_dictionaries: bool):
+        from snowflake.connector import DictCursor
+
         cursor = None
         try:
             if return_dictionaries:
diff --git a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py 
b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py
index da10a1efd72..9feda776510 100644
--- a/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py
+++ b/providers/snowflake/tests/unit/snowflake/hooks/test_snowflake.py
@@ -756,12 +756,12 @@ class TestPytestSnowflakeHook:
             mock.patch.dict(
                 "os.environ", 
AIRFLOW_CONN_TEST_CONN=Connection(**BASE_CONNECTION_KWARGS).get_uri()
             ),
-            
mock.patch("airflow.providers.snowflake.hooks.snowflake.connector") as 
mock_connector,
+            mock.patch("snowflake.connector.connect") as mock_connect,
         ):
             hook = SnowflakeHook(snowflake_conn_id="test_conn")
             conn = hook.get_conn()
-            
mock_connector.connect.assert_called_once_with(**hook._get_conn_params())
-            assert mock_connector.connect.return_value == conn
+            mock_connect.assert_called_once_with(**hook._get_conn_params())
+            assert mock_connect.return_value == conn
 
     def test_get_sqlalchemy_engine_should_support_pass_auth(self):
         with (
@@ -1503,12 +1503,12 @@ class TestPytestSnowflakeHook:
 
         with (
             mock.patch.dict("os.environ", 
AIRFLOW_CONN_TEST_CONN=Connection(**connection_kwargs).get_uri()),
-            
mock.patch("airflow.providers.snowflake.hooks.snowflake.connector") as 
mock_connector,
+            mock.patch("snowflake.connector.connect") as mock_connect,
         ):
             hook = SnowflakeHook(snowflake_conn_id="test_conn")
             hook.get_conn()
 
-            call_args = mock_connector.connect.call_args[1]
+            call_args = mock_connect.call_args[1]
             assert call_args["proxy_host"] == "proxy.example.com"
             assert call_args["proxy_port"] == 8080
             assert call_args["proxy_user"] == "proxy_user"

Reply via email to