"""Application configuration.""" import logging import os from os.path import abspath from os.path import dirname from os.path import join from os.path import pardir from dotenv import load_dotenv from secrets_manager.flask_ext import FlaskSecretsManager from sqlalchemy.pool import QueuePool from sqlalchemy.pool import StaticPool # Load environment variables from a .env file if present dotenv_path = abspath(join(dirname(__file__), pardir, '.env')) load_dotenv(dotenv_path) # Service information SERVICE_NAME = 'ows-asset-file-details' SERVICE_VERSION = '1.0.0' # Production environment PROD_ENVIRONMENT = 'prod' DEV_ENVIRONMENT = 'dev' QA_ENVIRONMENT = 'qa' TEST_ENVIRONMENT = 'test' ENVIRONMENT = os.environ.get('Environment') or DEV_ENVIRONMENT secrets_manager_client = FlaskSecretsManager( application_context=False, environment=ENVIRONMENT, service_name=SERVICE_NAME) # Database connection configuration. if ENVIRONMENT == TEST_ENVIRONMENT: DD_DB_URL = 'sqlite://' POOL_CLASS = StaticPool else: # pragma: no cover # direct_delivery database url DD_DB_URL = secrets_manager_client.get_cred('DD_DB_URL') or 'sqlite://' POOL_CLASS = QueuePool POOL_SIZE = 5 POOL_RECYCLE_MS = 3600 # Avoids connections going stale POOL_MAX_OVERFLOW = -1 POOL_PRE_PING = True # Errors and loggers SENTRY = secrets_manager_client.get_cred('SENTRY_DSN') or None if not SENTRY and ENVIRONMENT in [PROD_ENVIRONMENT, QA_ENVIRONMENT]: raise Exception(f'Sentry is not configured in {ENVIRONMENT}') LOGGER_LEVEL = logging.INFO LOGGER_NAME = 'ows1' PHYSICAL_LOCATION_ID = os.environ.get('PHYSICAL_LOCATION_ID', 1) # Generic handlers HEALTH_CHECK = '/hello/' # Swagger documentation path SWAGGER_FILE_PATH = 'spec/ows_asset_file_details-1.0.0.yaml'