from config import config import snowflake.connector from snowflake.connector import DictCursor class SnowflakeConnector: cnx = None cursor = None cnx_tions = None cursor_tions = None @staticmethod def do_connection(): return snowflake.connector.connect( user=config.SNOWFLAKE_USER, password=config.SNOWFLAKE_PASSWORD, account=config.SNOWFLAKE_ACCOUNT, warehouse=config.SNOWFLAKE_WAREHOUSE, database=config.SNOWFLAKE_DATABASE, schema=config.SNOWFLAKE_SCHEMA, ) @staticmethod def renew_connection(target="contributors"): if target == "contributors": if SnowflakeConnector.cursor: SnowflakeConnector.cursor.close() if SnowflakeConnector.cnx: SnowflakeConnector.cnx.close() SnowflakeConnector.cnx = SnowflakeConnector.do_connection() SnowflakeConnector.cursor = SnowflakeConnector.cnx.cursor(DictCursor) elif target == "contributions": if SnowflakeConnector.cursor_tions: SnowflakeConnector.cursor_tions.close() if SnowflakeConnector.cnx_tions: SnowflakeConnector.cnx_tions.close() SnowflakeConnector.cnx_tions = SnowflakeConnector.do_connection() SnowflakeConnector.cursor_tions = SnowflakeConnector.cnx_tions.cursor( DictCursor ) @staticmethod def check_connection(target="contributors"): if target == "contributors": if not SnowflakeConnector.cnx or not SnowflakeConnector.cursor: SnowflakeConnector.renew_connection(target) elif target == "contributions": if not SnowflakeConnector.cnx_tions or not SnowflakeConnector.cursor_tions: SnowflakeConnector.renew_connection(target) @staticmethod def execute_query(query, target="contributors"): if target == "contributors": SnowflakeConnector.check_connection(target) SnowflakeConnector.cursor.execute(query) elif target == "contributions": SnowflakeConnector.check_connection(target) SnowflakeConnector.cursor_tions.execute(query) def get_cursor(target="contributors"): SnowflakeConnector.check_connection(target) return ( SnowflakeConnector.cursor if target == "contributors" else SnowflakeConnector.cursor_tions ) def close(): if SnowflakeConnector.cursor: SnowflakeConnector.cursor.close() if SnowflakeConnector.cnx: SnowflakeConnector.cnx.close() if SnowflakeConnector.cursor_tions: SnowflakeConnector.cursor_tions.close() if SnowflakeConnector.cnx_tions: SnowflakeConnector.cnx_tions.close()