"""Config for rs2sf and s32sf workflow.""" import base64 from itertools import chain import os from snowflake_etl.conf import getconf def merge_configs(c1, c2): """Merge two flat configs. Values from c1 get overridden by values from c2 if the keys collide. Args: c1 (dict): first config. c2 (dict): second config. Returns: dict: merge result dict. """ c1 = c1 or {} c2 = c2 or {} return {k: v for k, v in chain(c1.items(), c2.items()) if v} # Default Snowflake connection parameters excluding credentials SF_PARAMS = { 'role': os.environ.get('SNOWFLAKE_ROLE'), 'warehouse': os.environ.get('SNOWFLAKE_WAREHOUSE'), 'db': os.environ.get('SNOWFLAKE_DATABASE'), 'schema': os.environ.get('SNOWFLAKE_SCHEMA') } # Snowflake connection credentials SF_CREDENTIALS = { 'user': os.environ.get('SNOWFLAKE_USER'), 'password': os.environ.get('SNOWFLAKE_PASSWORD'), 'account': os.environ.get('SNOWFLAKE_ACCOUNT') } # add optional private_key private_key = os.environ.get('SNOWFLAKE_KEY') if private_key: decoded_key = base64.b64decode(bytes(private_key, encoding='utf-8')) SF_CREDENTIALS['private_key'] = decoded_key SF_CONFIG = merge_configs(SF_PARAMS, SF_CREDENTIALS) _SF_CONF = getconf('snowflake') SF_DEFAULT_QUERIES = _SF_CONF['queries'] SF_LOAD_STRATEGIES = _SF_CONF['load_strategies'] SF_DEFAULT_FILE_FORMAT = _SF_CONF['default_file_format'] SF_MYSQL_STDOUT_FILE_FORMAT = _SF_CONF['mysql_stdout_file_format']