"""Configuration file.""" import logging import os from urllib.parse import quote import 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 .env file dotenv.load_dotenv('../.env') # Service information SERVICE_NAME = 'ows-project-manager' SERVICE_VERSION = '1.0.0' # 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) if ENVIRONMENT in [DEV_ENVIRONMENT, TEST_ENVIRONMENT]: # Credentials os.environ.setdefault('AWS_ACCESS_KEY_ID', 'fake_key') os.environ.setdefault('AWS_SECRET_ACCESS_KEY', 'fake_secret') # Errors and loggers SENTRY = secrets_manager_client.get_cred('SENTRY_DSN') LOGGER_DSN = os.environ.get('LOGGER_DSN') LOGGER_LEVEL = logging.INFO LOGGER_NAME = 'ows1' # Database credentials AR_DB_CREDENTIALS = { 'database': os.environ.get('AR_MYSQL_DATABASE'), 'host': os.environ.get('AR_MYSQL_HOST'), 'password': secrets_manager_client.get_cred('AR_MYSQL_PASSWORD'), 'user': os.environ.get('AR_MYSQL_USER') } LCE_DB_CREDENTIALS = { 'database': os.environ.get('LCE_MYSQL_DATABASE'), 'host': os.environ.get('LCE_MYSQL_HOST'), 'password': secrets_manager_client.get_cred('LCE_MYSQL_PASSWORD'), 'user': os.environ.get('LCE_MYSQL_USER') } # Label Copy Export queue configuration LCE_SQS_QUEUE = '{}-label-copy-export'.format(ENVIRONMENT) # Amazon S3 configuration S3_LCE_BUCKET_PATH = '{}-orcdbucket/label_copy_export'.format(ENVIRONMENT) # Database config if ENVIRONMENT == TEST_ENVIRONMENT: LCE_DB_URL = 'sqlite://' PM_DB_URL = 'sqlite://' CONNECT_ARGS = {'check_same_thread': False} POOLCLASS = StaticPool else: PM_DB_URL = ( 'mysql+pymysql://{user}:{password}@{host}/{db}?charset={charset}' .format( user=AR_DB_CREDENTIALS.get('user'), password=quote(AR_DB_CREDENTIALS.get('password').encode("utf-8")), host=AR_DB_CREDENTIALS.get('host'), db=AR_DB_CREDENTIALS.get('database'), charset='utf8mb4')) LCE_DB_URL = ( 'mysql+pymysql://{user}:{password}@{host}/{db}?charset={charset}' .format( user=LCE_DB_CREDENTIALS.get('user'), password=LCE_DB_CREDENTIALS.get('password'), host=LCE_DB_CREDENTIALS.get('host'), db=LCE_DB_CREDENTIALS.get('database'), charset='utf8')) # this has not been updated to utf8mb4 CONNECT_ARGS = {} POOLCLASS = QueuePool POOL_MAX_OVERFLOW = -1 POOL_PRE_PING = True POOL_RECYCLE_MS = 3600 # Avoids connections going stale POOL_SIZE = 5 assert PM_DB_URL, 'PM_DB_URL is missing from the environment' path = os.path.dirname(os.path.dirname(__file__)) # API definition API_DEFINITION = pyraml.parser.load( os.path.join(path, 'doc', 'api', '{service_name}-{version}.raml'.format( service_name=SERVICE_NAME, version=SERVICE_VERSION)))