"""Application configuration.""" import logging import os from botocore.exceptions import ClientError from dotenv import load_dotenv from secrets_manager.flask_ext import FlaskSecretsManager from sqlalchemy.pool import QueuePool from sqlalchemy.pool import StaticPool # Service information SERVICE_NAME = 'ows-asset-transcoder' SERVICE_VERSION = '1.0.0' # Production environment PROD_ENVIRONMENT = 'prod' DEV_ENVIRONMENT = 'dev' TEST_ENVIRONMENT = 'test' QA_ENVIRONMENT = 'qa' ENVIRONMENT = os.environ.get('Environment') or DEV_ENVIRONMENT IS_TEST_ENV = ENVIRONMENT == TEST_ENVIRONMENT IS_DEV = ENVIRONMENT == DEV_ENVIRONMENT if IS_DEV: # Load environment variables from a .env file load_dotenv() os.environ.setdefault('SENTRY_ENVIRONMENT', ENVIRONMENT) secrets_manager_client = FlaskSecretsManager( application_context=False, environment=ENVIRONMENT, service_name=SERVICE_NAME, force_remote=True if ENVIRONMENT == DEV_ENVIRONMENT else False) def get_cred_or_none(env_var): """Wrap around FlaskSecretsManager.get_cred. It is required when requesting some AWS secrets on 'dev' environment on DEV AWS account. """ if env_var in os.environ: return os.environ.get(env_var) try: return secrets_manager_client.get_cred(env_var) except ClientError as e: if 'ResourceNotFoundException' in str(e): return None else: raise e if ENVIRONMENT == TEST_ENVIRONMENT: TRANSCODER_DB_URL = 'sqlite://' POOL_CLASS = StaticPool elif ENVIRONMENT == DEV_ENVIRONMENT: TRANSCODER_DB_URL = get_cred_or_none('TRANSCODER_DB_URL') or 'sqlite://' POOL_CLASS = QueuePool POOL_MAX_OVERFLOW = -1 POOL_RECYCLE_MS = 3600 POOL_SIZE = 15 else: TRANSCODER_DB_URL = get_cred_or_none('TRANSCODER_DB_URL') POOL_CLASS = QueuePool POOL_MAX_OVERFLOW = -1 POOL_RECYCLE_MS = 3600 POOL_SIZE = 15 # S3. these are set in Terraform STS_TOKEN_DURATION = os.environ.get('STS_TOKEN_DURATION') or 3600 # 1 hour INPUT_ASSETS_BUCKET_NAME = os.environ.get('INPUT_ASSETS_BUCKET_NAME') UPLOAD_ROLE_ARN = os.environ.get('UPLOAD_ROLE_ARN') if ENVIRONMENT == TEST_ENVIRONMENT: INPUT_ASSETS_BUCKET_NAME = 'test-orcd-transcoder-input-bucket' # Errors and loggers SENTRY = get_cred_or_none('SENTRY_DSN') LOGGER_LEVEL = logging.INFO LOGGER_NAME = 'ows1' # Generic handlers HEALTH_CHECK = '/hello/' # Swagger documentation path SWAGGER_FILE_PATH = 'spec/ows-asset-transcoder-1.0.0.yaml' CLOUDFRONT_KEY_PAIR_ID = get_cred_or_none('CLOUDFRONT_KEY_PAIR_ID') CLOUDFRONT_PRIVATE_KEY = None CLOUDFRONT_PRIVATE_KEY_TEMPLATE = """ -----BEGIN RSA PRIVATE KEY----- {} -----END RSA PRIVATE KEY----- """ key = get_cred_or_none('CLOUDFRONT_PRIVATE_KEY') if key: key = key.replace(' ', '\n') CLOUDFRONT_PRIVATE_KEY = bytes(CLOUDFRONT_PRIVATE_KEY_TEMPLATE.format(key), encoding='utf-8') LOCAL_CLIENT_IP = get_cred_or_none('CLIENT_IP')