"""Application configuration.""" import logging import os from urllib.parse import quote import dotenv from pyraml import parser as raml_parser from secrets_manager.flask_ext import FlaskSecretsManager from sqlalchemy.pool import QueuePool from sqlalchemy.pool import StaticPool # Load environment variables from a .env file dotenv.load_dotenv('../.env') # Service information SERVICE_NAME = 'ows-product-workflow' 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 = secrets_manager_client.get_cred('SENTRY_DSN') or None LOGGER_LEVEL = logging.INFO LOGGER_NAME = 'ows1' # Generic handlers HEALTH_CHECK = '/hello/' # API definition API_DEFINITION = raml_parser.load( 'spec/api/ows-product-workflow-{version}.raml'.format( version=SERVICE_VERSION)) API_TEST_DEFINITION = raml_parser.load('spec/api/test.raml') # AWS Region AWS_REGION = os.environ.get('AWS_REGION', 'us-east-1') # Database config if ENVIRONMENT == TEST_ENVIRONMENT: DB_CONNECTION_URL = 'sqlite://' POOLCLASS = StaticPool else: # We must explicitly set utf8 encoding for MySQL connections DB_CONNECTION_URL = ( 'mysql+pymysql://{user}:{password}@{host}/{db}?charset={charset}' .format( user=secrets_manager_client.get_cred('AR_MYSQL_USER'), password=quote(str(secrets_manager_client.get_cred('AR_MYSQL_PASSWORD'))), host=secrets_manager_client.get_cred('AR_MYSQL_HOST'), db=secrets_manager_client.get_cred('AR_MYSQL_DATABASE'), charset='utf8mb4')) POOLCLASS = QueuePool POOL_MAX_OVERFLOW = -1 POOL_PRE_PING = True POOL_RECYCLE_MS = 3600 # Avoids connections going stale POOL_SIZE = 5