"""This file contains configuration data. Place here all keys and endpoints for integration with API. """ import logging import os from dotenv import load_dotenv from sqlalchemy.pool import NullPool from sqlalchemy.pool import StaticPool ROOT_PATH = os.path.dirname(os.path.dirname(__file__)) TEMPLATE_PATH = os.path.join(ROOT_PATH, 'templates') # Load environment variables from a .env file dotenv_path = os.path.join(ROOT_PATH, '.env') load_dotenv(dotenv_path) # Application info APP_NAME = 'daemon-sales-sheets' 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). SALESSHEETS_SQS_QUEUE = '{}-sales_sheets_generation'.format(ENVIRONMENT) SQS_MESSAGE_RETENTION_PERIOD = 1200 SQS_WAIT_TIME_SECONDS = 20 SQS_MESSAGE_VISIBILITY_TIMEOUT = 60 # Amazon S3 configuration # ----------------------- SALESSHEETS_BUCKET_NAME = '{}-orcdbucket'.format(ENVIRONMENT) # Database # -------- # Connection string 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'))) SS_DB_CREDENTIALS = { 'database': os.environ.get('SS_MYSQL_DATABASE'), 'host': os.environ.get('SS_MYSQL_HOST'), 'password': os.environ.get('SS_MYSQL_PASSWORD'), 'port': os.environ.get('SS_MYSQL_PORT'), 'user': os.environ.get('SS_MYSQL_USER') } SS_DB_CONNECTION_STRING = ( 'mysql+pymysql://{user}:{password}@{host}/{db}'.format( user=SS_DB_CREDENTIALS.get('user'), password=SS_DB_CREDENTIALS.get('password'), host=SS_DB_CREDENTIALS.get('host'), db=SS_DB_CREDENTIALS.get('database'))) DB_POOLCLASS = NullPool DB_CONNECT_ARGS = {'charset': 'utf8'} # 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 # Source of images for generation pdf by data from DB. IMAGE_BASE_URL = os.environ.get('IMAGE_BASE_URL', 'https://images.qaorch.com') STOP_TIMEOUT = 100 DEBUG = int(os.environ.get('DEBUG', 0)) PDF_RENDERING_DIR = 'results' BARCODES_RENDERING_DIR = 'results/barcodes' # Sales sheets 2.0 # ------------------------- # Days ago from sales start date ORDER_DUE_DATE_TIMEDELTA = 28 DEFAULT_VENDOR_OWNER = ['ORCHARD'] # Override default config settings for particular environments # ------------------------------------------------------------ # Dev if ENVIRONMENT == ENVIRONMENT_DEV: DEBUG = 1 SALESSHEETS_BUCKET_NAME = os.environ.get( 'DEV_SALESSHEETS_S3_BUCKET', SALESSHEETS_BUCKET_NAME) # 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 AR_DB_CONNECTION_STRING, 'AR_DB_CONNECTION_STRING is missing ' \ 'from the environment' # Test if ENVIRONMENT == ENVIRONMENT_TEST: IMAGE_BASE_URL = 'http://example.com' # Override db connection parameters not to wait for network timeouts on # missing credentials. Such timeouts might be quite high in some # environments. AR_DB_CONNECTION_STRING = 'sqlite://' SS_DB_CONNECTION_STRING = 'sqlite://' DB_POOLCLASS = StaticPool DB_CONNECT_ARGS = {}