"""Connector for snowflake requests.""" from snowflake_connector import snowflake_conn from snowflake_connector.snowflake_conn import set_default_sessionmaker from ows_product_physical import config from ows_product_physical.constant import snowflake DEFAULT_CONFIG = { 'pool_pre_ping': config.SNOWFLAKE_POOL_PRE_PING, 'pool_reset_on_return': config.SNOWFLAKE_POOL_RESET_ON_RETURN, 'commit_before_close': config.SNOWFLAKE_POOL_COMMIT_BEFORE_CLOSE } def fetchone(*args, **kwargs): """Passthrough to Snowflake to fetchone.""" kwargs.update(DEFAULT_CONFIG) return snowflake_conn.fetchone(*args, **kwargs) def fetchall(*args, **kwargs): """Passthrough to Snowflake to fetchall.""" kwargs.update(DEFAULT_CONFIG) return snowflake_conn.fetchall(*args, **kwargs) def SQLLoader(path): """Create a SQL loader in given path.""" return snowflake_conn.SQLLoader(path) def init_snowflake(): """Initialize Snowflake with creds and pool settings.""" sf_config = { 'role': config.SNOWFLAKE_ROLE, 'account': config.SNOWFLAKE_ACCOUNT, 'user': config.SNOWFLAKE_USER, 'password': config.SNOWFLAKE_PASSWORD, 'database': snowflake.SNOWFLAKE_ORCHARD_DATABASE, 'schema': snowflake.SNOWFLAKE_ART_RELATIONS_SCHEMA, 'warehouse': config.SNOWFLAKE_WAREHOUSE, 'client_session_keep_alive': config.SNOWFLAKE_SESSION_KEEP_ALIVE, } # service-wide Snowflake connection pool settings set_default_sessionmaker( pool_size=config.SNOWFLAKE_POOL_SIZE, pool_recycle=config.SNOWFLAKE_POOL_RECYCLE, max_overflow=config.SNOWFLAKE_POOL_MAX_OVERFLOW, connect_args=config.SNOWFLAKE_CONNECT_ARGS, sf_config=sf_config )