"""Local Snowflake connection utilities for development.""" import json import os import os.path from typing import Any from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization def get_connection_parameters(account: str) -> dict[str, Any]: """ Get Snowflake connection parameters for local development. Args: account: Connection profile name from connections.json Returns: Dictionary containing connection parameters with private key bytes """ connections_file = os.path.join(os.path.dirname(__file__), "connections.json") with open(connections_file, "r") as file: connection_params = json.load(file)[account] private_key_file = connection_params["private_file"] # Get password if provided (optional) private_key_password = connection_params.get("private_key_password") # Expand ~ to home directory private_key_file = os.path.expanduser(private_key_file) # Convert password to bytes if provided password_bytes = None if private_key_password: password_bytes = private_key_password.encode("utf-8") with open(private_key_file, "rb") as key: p_key = serialization.load_pem_private_key( key.read(), password=password_bytes, backend=default_backend() ) pkb = p_key.private_bytes( encoding=serialization.Encoding.DER, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption(), ) connection_parameters = { "account": connection_params["account"], "user": connection_params["user"], "role": connection_params["role"], "private_key": pkb, "warehouse": connection_params["warehouse"], "database": connection_params["database"], "schema": connection_params["schema"], } return connection_parameters