"""Application configuration.""" import logging import os from dotenv import load_dotenv import pyraml.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 load_dotenv("../.env") # Service information SERVICE_NAME = "ows-artist" SERVICE_VERSION = "0.0.1" # 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 ) # Database credentials ART_RELATIONS = { "database": secrets_manager_client.get_cred("AR_MYSQL_DATABASE"), "host": secrets_manager_client.get_cred("AR_MYSQL_HOST"), "password": secrets_manager_client.get_cred("AR_MYSQL_PASSWORD"), "port": secrets_manager_client.get_cred("AR_MYSQL_PORT"), "user": secrets_manager_client.get_cred("AR_MYSQL_USER"), } if ENVIRONMENT == TEST_ENVIRONMENT: OWS_ACCOUNT_URL = "http://you_need_to_mock_ows_account" AR_CONNECTION_URL = "sqlite://" POOL_CLASS = StaticPool else: OWS_ACCOUNT_URL = ( secrets_manager_client.get_cred("OWS_ACCOUNT_URL") or "http://qa-ows-account.theorchard.io" ) # We must explicitly set utf8 encoding for MySQL connections AR_CONNECTION_URL = ( "mysql+pymysql://{user}:{password}@{host}/{db}?charset={charset}".format( user=ART_RELATIONS.get("user"), password=ART_RELATIONS.get("password"), host=ART_RELATIONS.get("host"), db=ART_RELATIONS.get("database"), charset="utf8mb4", ) ) POOL_CLASS = QueuePool POOL_SIZE = 5 POOL_RECYCLE_MS = 3600 # Avoids connections going stale POOL_MAX_OVERFLOW = -1 POOL_PRE_PING = True assert OWS_ACCOUNT_URL, "OWS_ACCOUNT_URL is missing from the environment" # Errors and loggers SENTRY = secrets_manager_client.get_cred("SENTRY_DSN") or None LOGGER_DSN = os.environ.get("LOGGER_DSN") LOGGER_LEVEL = logging.INFO LOGGER_NAME = "ows1" # API definition API_DEFINITION = pyraml.parser.load( "docs/api/ows-artist-{version}.raml".format(version=SERVICE_VERSION) ) API_TEST_DEFINITION = pyraml.parser.load("docs/api/test.raml") # Generic handlers HEALTH_CHECK = "/hello/" ONLY_LOG_ACCESS_ERRORS = True if ENVIRONMENT == PROD_ENVIRONMENT else False