"""This file contains configuration data. Place here all keys and endpoints for integration with API. """ import logging import os from sqlalchemy.pool import NullPool from sqlalchemy.pool import StaticPool # Application info APP_NAME = 'label-copy-export' APP_VERSION = '0.0.1' # Environments ENVIRONMENT_PROD = 'prod' ENVIRONMENT_DEV = 'dev' ENVIRONMENT_QA = 'qa' ENVIRONMENT_TEST = 'test' ENVIRONMENT = os.environ.get('Environment', ENVIRONMENT_DEV) # Amazon Web Services # ------------------- AWS_REGION = os.environ.get('AWS_REGION', 'us-east-1') # Queue configuration # ------------------- # All queues are prefixed with the environment name (for policy settings) and # the name of the service (which allows to quickly identify unused pidbox). SQS_QUEUE = '{}-label-copy-export'.format(ENVIRONMENT) SQS_MESSAGE_RETENTION_PERIOD = 1200 SQS_WAIT_TIME_SECONDS = 20 SQS_MESSAGE_VISIBILITY_TIMEOUT = 60 # Amazon S3 configuration # ----------------------- S3_BUCKET_PATH = '{}-orcdbucket/label_copy_export'.format(ENVIRONMENT) # Database # -------- # Connection string LCE_DB_CREDENTIALS = { 'database': os.environ.get('LCE_MYSQL_DATABASE'), 'host': os.environ.get('LCE_MYSQL_HOST'), 'password': os.environ.get('LCE_MYSQL_PASSWORD'), 'port': os.environ.get('LCE_MYSQL_PORT'), 'user': os.environ.get('LCE_MYSQL_USER') } LCE_DB_CONNECTION_STRING = ( 'mysql+pymysql://{user}:{password}@{host}/{db}'.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'))) AR_DB_CREDENTIALS = { 'database': os.environ.get('AR_MYSQL_DATABASE'), 'host': os.environ.get('AR_MYSQL_HOST'), 'password': os.environ.get('AR_MYSQL_PASSWORD'), 'port': os.environ.get('AR_MYSQL_PORT'), 'user': os.environ.get('AR_MYSQL_USER') } AR_DB_CONNECTION_STRING = ( 'mysql+pymysql://{user}:{password}@{host}/{db}'.format( user=AR_DB_CREDENTIALS.get('user'), password=AR_DB_CREDENTIALS.get('password'), host=AR_DB_CREDENTIALS.get('host'), db=AR_DB_CREDENTIALS.get('database'))) DB_POOLCLASS = NullPool DB_CONNECT_ARGS = {'charset': 'utf8'} # Generic handlers HEALTH_CHECK = '/hello/' # Logging # ------- # Sentry: allows us to track effectively exceptions. SENTRY_DSN = os.environ.get('SENTRY_DSN') # Loggly LOGGER_DSN = os.environ.get('LOGGER_DSN') LOGGER_LEVEL = logging.INFO LOGGER_NAME = 'ows1' # Application settings # -------------------- # Number of worker threads for picking the messages from SQS # and executing the PDF generation QUEUE_READER_THREADS = int(os.environ.get('QUEUE_READER_THREADS', 1)) API_EXECUTOR_THREADS = int(os.environ.get('API_EXECUTOR_THREADS', 1)) # Number of messages to be prefetched from SQS into internal Queue PREFETCH_COUNT = API_EXECUTOR_THREADS # Number of messages to pull from SQS (max 10) SQS_NUM_MESSAGES = PREFETCH_COUNT if PREFETCH_COUNT <= 10 else 10 STOP_TIMEOUT = 100 DEBUG = int(os.environ.get('DEBUG', 0)) # Override default config settings for particular environments # ------------------------------------------------------------ # Dev if ENVIRONMENT == ENVIRONMENT_DEV: DEBUG = 1 # Prod if ENVIRONMENT == ENVIRONMENT_PROD: assert LOGGER_DSN, 'LOGGER_DSN env variable required in prod environment' assert SENTRY_DSN, 'SENTRY_DSN env variable required in prod environment' assert LCE_DB_CONNECTION_STRING, 'LCE_DB_CONNECTION_STRING is missing ' \ 'from the environment' # Test if ENVIRONMENT == ENVIRONMENT_TEST: # Override db connection parameters not to wait for network timeouts on # missing credentials. Such timeouts might be quite high in some # environments. LCE_DB_CONNECTION_STRING = 'sqlite://' DB_POOLCLASS = StaticPool DB_CONNECT_ARGS = {}