"""Application configuration.""" import logging import os from urllib.parse import quote import dotenv from secrets_manager.flask_ext import FlaskSecretsManager from sqlalchemy.pool import QueuePool from sqlalchemy.pool import StaticPool # Load environment variables from .env file dotenv.load_dotenv() # Service information SERVICE_NAME = 'ows-marketing' SERVICE_VERSION = '1.0.0' # Production environment PROD_ENVIRONMENT = 'prod' DEV_ENVIRONMENT = 'dev' QA_ENVIRONMENT = 'qa' TEST_ENVIRONMENT = 'test' ENVIRONMENT = os.environ.get('Environment', DEV_ENVIRONMENT) secrets_manager_client = FlaskSecretsManager( application_context=False, environment=ENVIRONMENT, service_name=SERVICE_NAME) # Errors and loggers SENTRY = secrets_manager_client.get_cred('SENTRY_DSN') or None LOGGER_LEVEL = logging.INFO LOGGER_NAME = 'ows1' # Generic handlers HEALTH_CHECK = '/hello/' # Database configuration if ENVIRONMENT == TEST_ENVIRONMENT: POOL_CLASS = StaticPool DB_URL = 'sqlite://' else: POOL_CLASS = QueuePool POOL_SIZE = 5 POOL_RECYCLE_MS = 3600 # Avoids connections going stale POOL_MAX_OVERFLOW = -1 POOL_PRE_PING = True # Database credentials if ENVIRONMENT == DEV_ENVIRONMENT: DB_CREDENTIALS = { "database": os.environ.get("AR_DB_DATABASE"), "host": os.environ.get("AR_DB_HOST"), "password": quote(str(os.environ.get("AR_DB_PASSWORD"))), "port": os.environ.get("AR_DB_PORT"), "user": os.environ.get("AR_DB_USER"), } else: DB_CREDENTIALS = { "database": os.environ.get("AR_DB_DATABASE"), "host": os.environ.get("AR_DB_HOST"), "password": secrets_manager_client.get_cred("AR_DB_PASSWORD"), "port": os.environ.get("AR_DB_PORT"), "user": os.environ.get("AR_DB_USER"), } DB_URL = "mysql+pymysql://{user}:{password}@{host}/{db}?charset=utf8mb4".format( user=DB_CREDENTIALS.get("user"), password=DB_CREDENTIALS.get("password"), host=DB_CREDENTIALS.get("host"), db=DB_CREDENTIALS.get("database"), ) # Model definition path MODEL_DEFINITION_PATH = 'marketing/models/definitions/{model_name}.json' ONLY_LOG_ACCESS_ERRORS = True