"""Snowflake connector module.""" import os from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from snowflake import connector import config def get_sf_private_key(secrets_manager_client): """Return Snowflake private_key. Returns: str: Snowflake private_key. """ private_key_string = secrets_manager_client.get_cred('SNOWFLAKE_KEY') private_key = None if private_key_string: private_key = serialization.load_pem_private_key( bytes(private_key_string, 'utf8'), password=None, backend=default_backend() ) return private_key def get_sf_connection(secrets_manager_client): """Return Snowflake connection.""" return connector.connect( user=os.environ.get('SNOWFLAKE_USER'), account=os.environ.get('SNOWFLAKE_ACCOUNT'), warehouse=os.environ.get('SNOWFLAKE_WAREHOUSE'), database=os.environ.get('SNOWFLAKE_DATABASE'), schema=os.environ.get('SNOWFLAKE_SCHEMA'), role=os.environ.get('SNOWFLAKE_ROLE'), private_key=get_sf_private_key(secrets_manager_client) ) def execute_snowflake_query(query: str, params: dict) -> list[dict]: """Extract data from Snowflake. Args: query (str): SQL statement for extracting data from Snowflake. params (dict): For formatting the query. Returns: List: List of tuples or empty list. """ with get_sf_connection(config.secrets_manager_client_lambda) as connection: with connection.cursor(connector.DictCursor) as cursor: return cursor.execute(query, params).fetchall()