"""Application configuration.""" import logging import os from os.path import abspath, dirname, join, pardir from dotenv import load_dotenv from secrets_manager.flask_ext import FlaskSecretsManager from sqlalchemy.pool import QueuePool, StaticPool # Load environment variables from a .env file dotenv_path = abspath(join(dirname(__file__), pardir, '.env')) load_dotenv(dotenv_path) # Service information SERVICE_NAME = 'ows-reporting' SERVICE_VERSION = '1.0.0' # Production environment PROD_ENVIRONMENT = 'prod' TEST_ENVIRONMENT = 'test' DEV_ENVIRONMENT = 'dev' QA_ENVIRONMENT = 'qa' ENVIRONMENT = os.environ.get('Environment', DEV_ENVIRONMENT) secrets_manager_client = FlaskSecretsManager( application_context=False, environment=ENVIRONMENT, service_name=SERVICE_NAME, ) # Errors and loggers SENTRY = os.environ.get('SENTRY_DSN') or None LOGGER_DSN = os.environ.get('LOGGER_DSN') LOGGER_LEVEL = logging.INFO LOGGER_NAME = 'ows1' if ENVIRONMENT == TEST_ENVIRONMENT: DB_URL = 'sqlite://' POOL_CLASS = StaticPool else: # Database config DB_URL = ( 'mysql+pymysql://{MYSQL_USER}:{MYSQL_PASSWORD}' '@{MYSQL_HOST}/{MYSQL_DATABASE}?charset=utf8' ).format( MYSQL_USER=os.environ.get('MYSQL_USER'), MYSQL_PASSWORD=secrets_manager_client.get_cred('MYSQL_PASSWORD'), MYSQL_HOST=os.environ.get('MYSQL_HOST'), MYSQL_DATABASE=os.environ.get('MYSQL_DATABASE'), ) POOL_CLASS = QueuePool POOL_SIZE = 5 POOL_RECYCLE_MS = 3600 # Avoids connections going stale POOL_MAX_OVERFLOW = -1 POOL_PRE_PING = True # Generic handlers HEALTH_CHECK = '/hello/' REPORT_RUN_STATUS = ( '/report//report_run/' ) # Mode Access Keys MODE_ACCESS_KEY = secrets_manager_client.get_cred('MODE_ACCESS_KEY') MODE_SECRET_KEY = secrets_manager_client.get_cred('MODE_SECRET_KEY') # Mode API Tokens MODE_API_KEY = secrets_manager_client.get_cred('MODE_API_KEY') MODE_API_TOKEN = secrets_manager_client.get_cred('MODE_API_TOKEN') MODE_API_AUTH_KEYS = (MODE_API_KEY, MODE_API_TOKEN) SNOWFLAKE_USER = os.environ.get('SNOWFLAKE_USER', 'test') SNOWFLAKE_PASSWORD = secrets_manager_client.get_cred('SNOWFLAKE_PASSWORD') SNOWFLAKE_POOL_SIZE = 15 # UWSGI number of threads SNOWFLAKE_POOL_RECYCLE = 4 * 55 * 60 # Avoids connections going stale SNOWFLAKE_POOL_PRE_PING = False SNOWFLAKE_POOL_RESET_ON_RETURN = None SNOWFLAKE_POOL_MAX_OVERFLOW = 5 # When environment variable is set in Elastic Beanstalk # set insecure_mode to True. Can be used when Snowflake is # having OCSP issues. # SNOWFLAKE_INSECURE_MODE = {'insecure_mode': False} if os.environ.get('SET_SNOWFLAKE_INSECURE_MODE_TRUE'): SNOWFLAKE_INSECURE_MODE = {'insecure_mode': True}