"""Config file for lambda function.""" from __future__ import annotations import logging import os from typing import TypedDict from dotenv import load_dotenv from secrets_manager.lambda_ext import LambdaSecretsManager # Load environment variables from a .env file if present load_dotenv(override=True) class MySQLConfig(TypedDict, total=False): """MySQL connection configuration.""" host: str user: str password: str database: str port: int APPLICATION_NAME = 'lambda-abacus-outbox-process' # AWS region configuration DEFAULT_AWS_REGION = 'us-east-1' AWS_REGION = os.environ.get('AWS_REGION', DEFAULT_AWS_REGION) # Environment setup DEV_ENVIRONMENT = 'dev' QA_ENVIRONMENT = 'qa' UAT_ENVIRONMENT = 'uat' PROD_ENVIRONMENT = 'prod' ENVIRONMENT = os.environ.get('ENVIRONMENT', DEV_ENVIRONMENT) # Logger setup LOGGING_LEVEL = os.environ.get('LOGGING_LEVEL', logging.INFO) LOGGER_DSN = os.environ.get('LOGGER_DSN') SENTRY_DSN = None # App config BATCH_SIZE = int(os.environ.get('BATCH_SIZE', '10')) EVENT_SOURCE = os.environ.get('EVENT_SOURCE', 'abacus.outbox') # MySQL configuration MYSQL_CONFIG: MySQLConfig = { 'host': os.environ.get('MYSQL_DB_HOST', ''), 'user': os.environ.get('MYSQL_DB_USER', ''), 'password': os.environ.get('MYSQL_DB_PASS', ''), 'database': os.environ.get('MYSQL_DB_NAME', 'royalty_accounting'), 'port': int(os.environ.get('MYSQL_DB_PORT', '3306')), } # Pull QA, UAT & Prod credentials from secrets manager if ENVIRONMENT in [QA_ENVIRONMENT, UAT_ENVIRONMENT, PROD_ENVIRONMENT]: client = LambdaSecretsManager( environment=ENVIRONMENT, service_name=APPLICATION_NAME ) MYSQL_CONFIG['password'] = client.get_cred('MYSQL_DB_PASS') SENTRY_DSN = client.get_cred('SENTRY_DSN')