From 28a9bebec85db982f3ea1bb4ef155b8f0c470732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Bregu=C5=82a?= Date: Thu, 27 Jan 2022 15:12:21 +0100 Subject: [PATCH 1/2] Fix #21096: Support boolean in extra__snowflake__insecure_mode --- .../providers/snowflake/hooks/snowflake.py | 10 ++++++- .../snowflake/hooks/test_snowflake.py | 26 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/airflow/providers/snowflake/hooks/snowflake.py b/airflow/providers/snowflake/hooks/snowflake.py index a61f6e0af13ce..5524bed5b975c 100644 --- a/airflow/providers/snowflake/hooks/snowflake.py +++ b/airflow/providers/snowflake/hooks/snowflake.py @@ -32,6 +32,14 @@ from airflow.utils.strings import to_boolean +def _try_to_boolean(value: Any): + if value is None: + return False + if isinstance(value, (str, type(None))): + return to_boolean(value) + return value + + class SnowflakeHook(DbApiHook): """ A client to interact with Snowflake. @@ -157,7 +165,7 @@ def _get_conn_params(self) -> Dict[str, Optional[str]]: schema = conn.schema or '' authenticator = conn.extra_dejson.get('authenticator', 'snowflake') session_parameters = conn.extra_dejson.get('session_parameters') - insecure_mode = to_boolean( + insecure_mode = _try_to_boolean( conn.extra_dejson.get( 'extra__snowflake__insecure_mode', conn.extra_dejson.get('insecure_mode', None) ) diff --git a/tests/providers/snowflake/hooks/test_snowflake.py b/tests/providers/snowflake/hooks/test_snowflake.py index adc57ab97572f..650fb004b4b26 100644 --- a/tests/providers/snowflake/hooks/test_snowflake.py +++ b/tests/providers/snowflake/hooks/test_snowflake.py @@ -233,6 +233,32 @@ class TestPytestSnowflakeHook: 'warehouse': 'af_wh', }, ), + ( + { + **BASE_CONNECTION_KWARGS, + 'extra': { + **BASE_CONNECTION_KWARGS['extra'], + 'extra__snowflake__insecure_mode': False, + }, + }, + ( + 'snowflake://user:pw@airflow.af_region/db/public?' + 'application=AIRFLOW&authenticator=snowflake&role=af_role&warehouse=af_wh' + ), + { + 'account': 'airflow', + 'application': 'AIRFLOW', + 'authenticator': 'snowflake', + 'database': 'db', + 'password': 'pw', + 'region': 'af_region', + 'role': 'af_role', + 'schema': 'public', + 'session_parameters': None, + 'user': 'user', + 'warehouse': 'af_wh', + }, + ), ], ) def test_hook_should_support_prepare_basic_conn_params_and_uri( From 9cdefca77935adb7c166e47204e9f9dfae597fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Bregu=C5=82a?= Date: Fri, 28 Jan 2022 03:56:03 +0100 Subject: [PATCH 2/2] Update snowflake.py --- airflow/providers/snowflake/hooks/snowflake.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/airflow/providers/snowflake/hooks/snowflake.py b/airflow/providers/snowflake/hooks/snowflake.py index 5524bed5b975c..f1020887e488e 100644 --- a/airflow/providers/snowflake/hooks/snowflake.py +++ b/airflow/providers/snowflake/hooks/snowflake.py @@ -33,8 +33,6 @@ def _try_to_boolean(value: Any): - if value is None: - return False if isinstance(value, (str, type(None))): return to_boolean(value) return value