"""Configuration variables.""" import itertools import os # Environments PROD_ENVIRONMENT = 'prod' QA_ENVIRONMENT = 'qa' DEV_ENVIRONMENT = 'dev' TEST_ENVIRONMENT = 'test' ENVIRONMENT = os.environ.get('Environment', DEV_ENVIRONMENT) # Error logging SENTRY = os.environ.get('SENTRY_DSN') or None # S3 S3_BUCKET_NAME = os.environ.get('S3_BUCKET_NAME') # These env vars are required for Snowflake itself to access our S3 bucket. AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID') AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY') # Availability DB AVAILABILITY_DB_CREDENTIALS = { 'AVAIL_DB_USER': os.environ.get('AVAIL_DB_USER'), 'AVAIL_DB_PASSWORD': os.environ.get('AVAIL_DB_PASSWORD'), 'AVAIL_DB_HOST': os.environ.get('AVAIL_DB_HOST'), 'AVAIL_DB_PORT': os.environ.get('AVAIL_DB_PORT', '3306'), 'AVAIL_DB_NAME': os.environ.get('AVAIL_DB_NAME'), } AVAILABILITY_DB_CONNECTION_STRING = ( 'mysql+pymysql://{AVAIL_DB_USER}:{AVAIL_DB_PASSWORD}@{AVAIL_DB_HOST}' ':{AVAIL_DB_PORT}/{AVAIL_DB_NAME}'.format(**AVAILABILITY_DB_CREDENTIALS)) AVAILABILITY_DB_CONNECTION_ARGS = {'charset': 'utf8'} # Snowflake DB SNOWFLAKE_DB_CREDENTIALS = { 'SF_USER': os.environ.get('SF_USER'), 'SF_PASSWORD': os.environ.get('SF_PASSWORD'), 'SF_ACCOUNT': os.environ.get('SF_ACCOUNT'), } SNOWFLAKE_DB_CONNECTION_STRING = ( 'snowflake://{SF_USER}:{SF_PASSWORD}@{SF_ACCOUNT}'.format( **SNOWFLAKE_DB_CREDENTIALS) ) SF_DB_NAME = os.environ.get('SF_DB_NAME') SF_WAREHOUSE = os.environ.get('SF_WAREHOUSE') SF_ROLE = os.environ.get('SF_ROLE') # Environment-specific checks if ENVIRONMENT == TEST_ENVIRONMENT: AVAILABILITY_DB_CONNECTION_STRING = 'sqlite://' AVAILABILITY_DB_CONNECTION_ARGS = {} SNOWFLAKE_DB_CONNECTION_STRING = 'sqlite://' if ENVIRONMENT in (PROD_ENVIRONMENT, QA_ENVIRONMENT): required_env_vars = itertools.chain( AVAILABILITY_DB_CREDENTIALS.items(), SNOWFLAKE_DB_CREDENTIALS.items(), ( ('S3_BUCKET_NAME', S3_BUCKET_NAME), ('AWS_ACCESS_KEY_ID', AWS_ACCESS_KEY_ID), ('AWS_SECRET_ACCESS_KEY', AWS_SECRET_ACCESS_KEY), ('SF_ROLE', SF_ROLE), ), ) for env_var_name, env_var_value in required_env_vars: assert env_var_value, ( '{} is not present in the environment'.format(env_var_name)) required_config_vars = ( 'AVAILABILITY_DB_CONNECTION_STRING', 'SNOWFLAKE_DB_CONNECTION_STRING', ) for config_var_name in required_config_vars: _locals = locals() assert _locals.get(config_var_name), ( '{} is not set in config.py'.format(config_var_name))