from fansifter_common.adapters.db import Database from snowflake.connector import SnowflakeConnection from snowflake.snowpark import Session as SnowparkSession from snowflake.snowpark._internal.server_connection import ServerConnection class DefaultDB(Database): """Represents the default database.""" class ReportingDB(Database): """Represents the reporting database.""" def create_snowpark_session(self) -> SnowparkSession: return SnowparkSession( conn=ServerConnection(options={}, conn=self._get_snowflake_connection()) ) def _get_snowflake_connection(self) -> SnowflakeConnection: # Use snowflake active connection proxied = self.session.connection().connection if not isinstance(proxied.dbapi_connection, SnowflakeConnection): raise ValueError( "dbapi_connection must be an instance of SnowflakeConnection" ) return proxied.dbapi_connection