"""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-podcast' 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 IS_QA = ENVIRONMENT == QA_ENVIRONMENT IS_PROD = ENVIRONMENT == PROD_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 # Automation user uuid for qa AUTOMATION_ADMIN_UUID = 'oa:9' if ENVIRONMENT == TEST_ENVIRONMENT: PODCAST_DB_URL = 'sqlite://' POOL_CLASS = StaticPool elif ENVIRONMENT == DEV_ENVIRONMENT: AUTOMATION_ADMIN_UUID = '78a5b45c-8186-4d8d-b76a-5c38e116631b' PODCAST_DB_URL = get_cred_or_none('PODCAST_DB_URL') or 'sqlite://' POOL_CLASS = QueuePool POOL_MAX_OVERFLOW = -1 POOL_RECYCLE_MS = 3600 POOL_SIZE = 15 else: PODCAST_DB_URL = get_cred_or_none('PODCAST_DB_URL') POOL_CLASS = QueuePool POOL_MAX_OVERFLOW = -1 POOL_RECYCLE_MS = 3600 POOL_SIZE = 15 # S3. these are set in Terraform INPUT_ASSETS_BUCKET_NAME = get_cred_or_none('INPUT_ASSETS_BUCKET_NAME') OUTPUT_ASSETS_BUCKET_NAME = get_cred_or_none('OUTPUT_ASSETS_BUCKET_NAME') UPLOAD_ROLE_ARN = get_cred_or_none('UPLOAD_ROLE_ARN') if ENVIRONMENT == TEST_ENVIRONMENT: INPUT_ASSETS_BUCKET_NAME = 'test-orcd-podcast-input-bucket' OUTPUT_ASSETS_BUCKET_NAME = 'test-orcd-podcast-output-bucket' # Errors and loggers SENTRY = get_cred_or_none('SENTRY_DSN') LOGGER_LEVEL = logging.INFO LOGGER_NAME = 'ows1' # Store urls CASTBOX_URL = 'https://castbox.fm/vic' POCKET_CASTS_URL = 'https://pca.st/itunes' RADIO_PUBLIC_URL = 'https://radiopublic.com' PODCAST_ADDICT_URL = 'https://podcastaddict.com' PLAYER_FM_URL = 'https://player.fm/series' POD_LINK_URL = 'https://pod.link' APPLE_URL = 'https://itunes.apple.com' APPLE_API_URL = 'https://amp-api.podcasts.apple.com' APPLE_API_ORIGIN = 'https://podcasts.apple.com' DEEZER_URL = 'https://api.deezer.com' AMAZON_URL = 'https://music.amazon.com' STITCHER_URL = 'https://www.stitcher.com' STITCHER_API_URL = 'https://api.prod.stitcher.com' GOOGLE_PODCAST_URL = 'https://podcasts.google.com' PANDORA_PODCAST_URL = 'https://www.pandora.com' # Spotify api creds SPOTIFY_CLIENT_ID = None SPOTIFY_SECRET_ID = None # Selenium grid GRID_IP = '10.40.1.116' GRID_IP_NAME = 'selenium-chrome' GRID_PORT = '4444' # Generic handlers HEALTH_CHECK = '/hello/' # Swagger documentation path SWAGGER_FILE_PATH = 'spec/ows_podcast-1.0.0.yaml' AUTH0_CLIENT_ID = get_cred_or_none('AUTH0_CLIENT_ID') MEGAPHONE_API_TOKEN = get_cred_or_none('MEGAPHONE_API_TOKEN') MEGAPHONE_ORG_ID = get_cred_or_none('MEGAPHONE_ORG_ID') OUTPUT_CDN_BASE_URL = get_cred_or_none('OUTPUT_CDN_BASE_URL') 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') DAEMON_NOTIFICATIONS_QUEUE_URL = get_cred_or_none('DAEMON_NOTIFICATIONS_QUEUE_URL') AWS_REGION = 'us-east-1' ONLY_LOG_ACCESS_ERRORS = True if ENVIRONMENT == PROD_ENVIRONMENT else False